#-------------------------------------------------- import sys import functools #sys.setrecursionlimit(10**9) #codon↓-------------------------------------------- _factorial=[1] def factorial(n): while len(_factorial)<=n: _factorial.append((_factorial[-1]*len(_factorial))%mod) return _factorial[n] def binom(n,r): if r>=mod: raise ValueError("r is too big") if n<0: return 0 if r>n: return 0 if r<0: return 0 ans=((factorial(n)*pow(factorial(r),mod-2,mod))%mod*pow(factorial(n-r),mod-2,mod))%mod return ans import string import itertools alp_low=list(string.ascii_lowercase) alp_up=list(string.ascii_uppercase) dij=[[0,1],[1,0],[0,-1],[-1,0]] mod=998244353 INF=10**18 def dijkstra(edges, num_node,start): """ [node_num,weight>0][ (example) Edges = [ [[1, 4], [2, 3]], [[0, 1], [3, 1]], [[3, 2]], [], ] """ import heapq;n=[INF]*num_node;n[start]=0;n_name=[];heapq.heappush(n_name,[0,start]) while len(n_name): _,min_p=heapq.heappop(n_name) for f in edges[min_p]: g,c=f if n[min_p]+c=n-2: print("! -1") else: i1,i2=[i for i in range(n-1) if temp[i]!=0][:2] print(f"? {i1} {i2}") p,=nin() final=[-1]*n pr=round((temp[i1]*temp[i2]*p)**0.5) final[n-1]=pr//p for i in range(n-1): final[i]=temp[i]//final[n-1] print(f'! {"".join([str(i) for i in final[::-1]])}') if __name__=="__main__": main()