import math # 数学ライブラリ(最大公約数(greatest common divisor, gcd))のため n = int(input()) # 合成数 n を取得 def jacobi_symbol(a: int, n: int) -> int: assert n > 0 and (n & 1) == 1 j = 1 if a < 0: a = -a if (n & 3) == 3: j = -j while a != 0: while (a & 1) == 0: a, j = (a >> 1), (-j if ((n + 2) & 5) == 5 else j) if (a & n & 3) == 3: j = -j a, n = n % a, a return j if n == 1 else 0 def check(v): # 出力チェック関数 g = math.gcd(v, n) if g > 2 and g < n: print("!", g, n//g) exit() check(3) # 3の素因数をチェック for a in range(2, n-1): # a = {2,3,4,...,n-2} check(a) # 質問前にaをチェック if jacobi_symbol(a, n) == 1: continue print("?", a) # 位数を質問 r = int(input()) # 位数 r の回答 if r&1 == 0: # if r is even: r >>= 1 # r //= 2 for b in range(99): # b = {0,1,2,...,98} check(pow(a+b, r, n)-1) # pow(a + b, r) % n - 1