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