s=->(x){A=[];def k(x)A<<x
y=Prime.prime_division x;n=0..y.size-1
n.each{|i|n.to_a.combination(i+1).each{|c|c.each{|z|v=y.dup
v[z][1]>1?v[z]=[v[z].join.to_i,1]:next
k v.inject(1){|s,b|s*b[0]**b[1]}}}}end;k x;A.uniq.sort}


#usage

#load from the standard library
require"prime"

#call function and print result
$<.read.split(' ').each do |num|
  puts "#{num} => #{s.call(num.to_i).join(' ')}"
end 