import sys import math def solve(): input = sys.stdin.readline N = int(input()) L = N - 1 # leading digit position (10^L place), always nonzero # Phase 1: Query (j, L) for all j < L → get d[j]*d[L] products = {} for j in range(L): print(f"? {j} {L}", flush=True) p = int(input()) if p == -1: return products[j] = p nonzero = [j for j in range(L) if products[j] > 0] # Case: no non-zero non-leading digits → leading digit unknown if len(nonzero) == 0: print("! -1", flush=True) return # Case: exactly one non-zero → only one query result, may be ambiguous if len(nonzero) == 1: j1 = nonzero[0] p1 = products[j1] # = d[j1] * d[L] solutions = [(a, p1//a) for a in range(1,10) if p1 % a == 0 and 1 <= p1//a <= 9] if len(solutions) == 1: dj1, dL = solutions[0] digits = [0] * N digits[L] = dL digits[j1] = dj1 X = sum(digits[i] * (10**i) for i in range(N)) print(f"! {X}", flush=True) else: print("! -1", flush=True) return # Case: 2+ non-zero positions → can determine d[L] exactly j1, j2 = nonzero[0], nonzero[1] print(f"? {j1} {j2}", flush=True) # = d[j1]*d[j2] q12 = int(input()) if q12 == -1: return # d[L]^2 = (d[j1]*d[L]) * (d[j2]*d[L]) / (d[j1]*d[j2]) dL_sq = products[j1] * products[j2] // q12 dL = round(math.isqrt(dL_sq)) digits = [0] * N digits[L] = dL for j in range(L): digits[j] = products[j] // dL if products[j] > 0 else 0 X = sum(digits[i] * (10**i) for i in range(N)) print(f"! {X}", flush=True) solve()