#include //#include using namespace std; //using namespace atcoder; using ll = long long; using ull = unsigned long long; using ld = long double; //using mint = modint998244353; int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); ll n; cin >> n; vector> num(100,vector(10,0)); for(ll i = 1; i < 10; i++){ for(ll t = 1; t < 10; t++){ num[i*t][i] = 1; num[i*t][t] = 1; } } vector in(n-1,0); for(ll i = 0; i < n-1; i++){ cout << "? " << i << " " << n-1 << endl; cin >> in[i]; } vector> ans(10,vector(n,0)); ans[0][n-1] = -1; for(ll i = 1; i < 10; i++){ ans[i][n-1] = i; for(ll t = 0; t < n-1; t++){ if(in[t] % i != 0 || in[t] / i >= 10){ ans[i][n-1] = -1; break; } ans[i][t] = in[t] / i; } } if(n == 2){ if(in[0] == 1){ cout << "! 11" << endl; }else if(in[0] == 25){ cout << "! 55" << endl; }else if(in[0] == 49){ cout << "! 77" << endl; }else if(in[0] == 64){ cout << "! 88" << endl; }else if(in[0] == 81){ cout << "! 99" << endl; }else cout << "! -1" << endl; }else{ pair ask = {-1,-1}; for(ll i = 0; i < n-1; i++){ for(ll t = i+1; t < n-1; t++){ ll count = 0; set val; for(ll u = 1; u < 10; u++){ if(ans[u][n-1] != -1){ count++; val.insert(ans[u][i] * ans[u][t]); } } if(val.size() == count){ ask = {i,t}; break; } } if(ask.first != -1)break; } if(ask.first == -1){ cout << "! -1" << endl; }else{ cout << "? " << ask.first << " " << ask.second << endl; ll x; cin >> x; for(ll i = 1; i < 10; i++){ if(ans[i][n-1] != -1 && ans[i][ask.first] * ans[i][ask.second] == x){ cout << "! "; for(ll t = n-1; t >= 0; t--){ cout << ans[i][t]; } cout << endl; break; } } } } }