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