#include using namespace std; typedef long long ll; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vll; typedef vector vs; // マクロ #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, a, n) for (int i = (a); i < (int)(n); i++) #define rrep(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define each(x, v) for (auto &x : v) #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define sz(x) ((int)(x).size()) #define pb(x) push_back(x) #define mp(x, y) make_pair(x, y) int mySqrt(int x){ for(int i = 0; i < 10; i++){ if(x == i * i){ return i; } } return -1; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; if(n == 2){ cout << "? " << 0 << " " << 1 << endl; cout.flush(); int special; cin >> special; if(special == 1){ cout << "! 11" << endl; cout.flush(); } else if(special == 49){ cout << "! 77" << endl; cout.flush(); } else if(special == 64){ cout << "! 88" << endl; cout.flush(); } else if(special == 81){ cout << "! 99" << endl; cout.flush(); } else { cout << "! -1" << endl; cout.flush(); } return 0; } int x[n]; int a = n-2; int b = n-3; int x0a, x0b; cout << "? " << n-1 << " " << a << endl; cin >> x0a; cout << "? " << n-1 << " " << b << endl; cin >> x0b; int i; for(i = n-4; i >= 0; i--){ bool flag = false; if(x0a == 0){ flag = true; x[a] = 0; a = i; cout << "? " << n-1 << " " << a << endl; cout.flush(); cin >> x0a; } else if(x0b == 0){ flag = true; x[b] = 0; b = i; cout << "? " << n-1 << " " << b << endl; cout.flush(); cin >> x0b; } if(x0a != 0 && x0b != 0) { cout << "? " << a << " " << b << endl; cout.flush(); int xab; cin >> xab; x[n-1] = mySqrt(x0a * x0b / xab); x[a] = x0a / x[n-1]; x[b] = x0b / x[n-1]; if(flag){ i -= 1; } break; } } if(x0a == 0 && x0b == 0){ cout << "! -1" << endl; cout.flush(); return 0; } else if(x0a == 0){ int special = x0b; x[a] = 0; if(special == 1){ x[n-1] = 1; x[b] = 1; } if(special == 49){ x[n-1] = 7; x[b] = 7; } else if(special == 64){ x[n-1] = 8; x[b] = 8; } else if(special == 81){ x[n-1] = 9; x[b] = 9; } else { cout << "! -1" << endl; cout.flush(); return 0; } } else if(x0b == 0){ int special = x0a; x[b] = 0; if(special == 1){ x[n-1] = 1; x[a] = 1; } if(special == 49){ x[n-1] = 7; x[a] = 7; } else if(special == 64){ x[n-1] = 8; x[a] = 8; } else if(special == 81){ x[n-1] = 9; x[a] = 9; } else { cout << "! -1" << endl; cout.flush(); return 0; } } for(; i >= 0; i--){ cout << "? " << n-1 << " " << i << endl; cout.flush(); int x0i; cin >> x0i; x[i] = x0i / x[n-1]; } cout << "! "; for(int i = n-1; i >= 0; i--){ cout << x[i]; } cout << endl; cout.flush(); return 0; }