s=->(x){A=[];def k(x)A<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