#include using namespace std; using ll = long long; const ll INF = 1ll << 60; #define REP(i, n) for(ll i =0; i < ll(n); i++) template using V = vector; template bool chmax(A& a, B b) { return a bool chmin(A& a, B b) { return b> n; V prod(n-1); V non_zero; REP(i, n-1) { cout << "? " << i << ' ' << n-1 << endl; cin >> prod[i]; if(prod[i]) non_zero.push_back(i); } if(non_zero.size() == 0) { cout << "! -1" << endl; return; } if(non_zero.size() == 1) { map mp = {{1LL, 1LL}, {25LL, 5LL}, {49LL, 7LL}, {64LL, 8LL}, {81LL, 9LL}}; ll p = prod[non_zero[0]]; if(mp.contains(p)) { ll d0 = mp[p]; cout << "! "; for(int i = n-1; i >= 0; i--) { if(i == n-1 || i == non_zero[0]) cout << d0; else cout << 0; } cout << endl; } else cout << "! -1" << endl; return; } cout << "? " << non_zero[0] << ' ' << non_zero[1] << endl; ll p; cin >> p; ll d02 = prod[non_zero[0]] * prod[non_zero[1]] / p; ll d0 = sqrt(d02); assert(d0*d0 == d02); cout << "! " << d0; for(int i = n-2; i >= 0; i--) { cout << prod[i] / d0; } cout << endl; } int main() { // cin.tie(0)->sync_with_stdio(0); testcase(); }