def pow(a, b) x = 1 while b > 0 if b.odd? x *= a end a *= a b /= 2 a /= 1e18.to_i if a > 1e18 x /= 1e18.to_i if x > 1e18 end return x end gets.to_i.times do a,b = gets.split.map(&:to_i) af = a.to_f bf = b.to_f #p af**b #fmt = ("%.1e"%[af**b]).scan(/([0-9.]+)e\+(\d+)/)[0] #puts "#{fmt[0][0]} #{fmt[0][2]} #{fmt[1].to_i}" #p af**b #p Math.log(af**b, 10) s = pow(a,b).to_s q = bf/Math.log(10, a) puts "#{s[0]} #{s[1]} #{q.to_i}" end