#include using namespace std; typedef long long ll; typedef pair P; #define REP(i,n) for(ll i=0;i f(ll n){ vector d; for(ll i=1;i*i<=n;i++){ if(n%i==0){ d.push_back(i); if(i!=n/i) d.push_back(n/i); } } return d; } int main(void){ cin.tie(nullptr); ios_base::sync_with_stdio(false); ll i,j; ll N; cin >> N; vector v(N,-1); ll c=0,p=-1,x=-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; } vector e=f(p); ll n=e.size(); vector u; ll a=0; bool g=true; REP(i,n){ if(!(e[i]<=9 && p/e[i]<=9)) continue; ll cc=c; u=v; u[N-1]=e[i]; u[x]=p/e[i]; bool f=true; for(j=N-1;j>=0;j++){ if(u[j]!=-1) continue; cout << "? " << j << ' ' << N-1 << endl; cout.flush(); cc++; ll q; cin >> q; if(q%v[N-1]==0) u[j]=q/v[N-1]; else{ f=false; break; } } if(!f) continue; if(f && cc<=N){ a++; if(a>=2){ g=false; break; } } } if(g){ cout << "! "; for(i=N-1;i>=0;i--) cout << u[i]; cout << endl; cout.flush(); } else{ cout << "! " << -1 << endl; cout.flush(); } return 0; }