# frozen_string_literal: true def query(a) puts "? #{a}" STDOUT.flush gets.to_i end n = gets.to_i g = -1 loop do a = rand(2...n) g = n.gcd(a) break if g != 1 t = query(a) next if t.odd? b = a.pow(t / 2, n) g = n.gcd(b - 1) break if g != 1 next if b == n - 1 g = n.gcd(b + 1) break if g != 1 end puts "! #{g} #{n / g}"