M = 10000 n = gets.not_nil!.to_i a = gets.not_nil!.split.map(&.to_i) cnt = Array.new(M + 1, 0) (1...n).each { |i| cnt[a[i]] += 1 } divs = Array(Array(Int32)).new(M + 1) { [1] } (2..M).each do |i| (i..M).step(i) do |j| divs[j] << i end end (1..M).each { |i| divs[i].reverse! } s = Array(Set(Int32)).new(M + 1) { Set(Int32).new } (1..M).each do |i| if cnt[i] != 0 divs[i].each { |d| s[d].add(i) } end end now = a[0] print "#{now} " until s[1].empty? lcm = 1_000_000_000 t = 1_000_000_000 divs[now].each do |d| next if s[d].empty? v = s[d].first candidate = v * now // d if lcm >= candidate lcm = candidate t = Math.min(t, v) end end break if t == 1_000_000_000 now = t cnt[t].times { print "#{t} " } cnt[t] = 0 divs[t].each { |d| s[d].delete(t) } end puts