#include using namespace std; typedef long long ll; typedef pair P; #define REP(i,n) for(ll i=0;i> N; vector x(N,-1),a(N,-1),v; for(i=N-2;i>=0;i--){ cout << "? " << i << ' ' << N-1 << endl; cout.flush(); ll p; cin >> p; x[i]=p; if(p!=0) v.push_back(i); } ll n=v.size(); if(n==0){ cout << "! " << -1 << endl; cout.flush(); } else if(n==1){ j=v[0]; if(x[j]==1){ a[j]=1; a[N-1]=1; } else if(x[j]==25){ a[j]=5; a[N-1]=5; } else if(x[j]==49){ a[j]=7; a[N-1]=7; } else if(x[j]==64){ a[j]=8; a[N-1]=8; } else if(x[j]==81){ a[j]=9; a[N-1]=9; } else{ cout << "! " << -1 << endl; cout.flush(); return 0; } for(i=N-1;i>=0;i--){ if(a[i]!=-1) continue; a[i]=x[i]/a[N-1]; } cout << "! "; for(i=N-1;i>=0;i--) cout << a[i]; cout << endl; cout.flush(); } else{ j=v[0]; k=v[1]; cout << "? " << k << ' ' << j << endl; cout.flush(); ll r; cin >> r; a[N-1]=(ll)sqrt(1.0*x[j]*x[k]/r); a[j]=x[j]/a[N-1]; a[k]=x[k]/a[N-1]; for(i=N-1;i>=0;i--){ if(a[i]!=-1) continue; a[i]=x[i]/a[N-1]; } cout << "! "; for(i=N-1;i>=0;i--) cout << a[i]; cout << endl; cout.flush(); } return 0; }