import sys ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ##################################################################### from math import floor def ask(i, j): if i > j: i, j = j, i print("?", i, j, flush= True) x = ni() if x == -1: exit() return x def ans(x): if x == -1: print("!", x, flush=True) else: print("!", "".join(map(str, x[::-1])), flush=True) n = ni() t = [] g = [0] * n res = [-1] * n for i in range(n-1): g[i] = ask(i, n-1) if g[i] != 0: t.append(i) else: res[i] = 0 if len(t) >= 2: break if len(t) == 0: ans(-1) elif len(t) == 1: if g[t[0]] in [1, 25, 49, 64, 81]: res[t[0]] = int(g[t[0]] ** 0.5) res[-1] = int(g[t[0]] ** 0.5) ans(res) else: ans(-1) else: X = g[t[0]] Y = g[t[1]] Z = ask(t[0], t[1]) k = floor(0.5 + (X * Y * Z) ** 0.5) # print(X, Y, Z) res[-1] = k // Z res[t[0]] = k // Y res[t[1]] = k // X for i in range(t[1] + 1, n-1): res[i] = ask(n-1, i) // res[-1] ans(res) "50905020"