#include using namespace std; long long ask(int a, int b) { cout << "? " << a << " " << b << endl; cout.flush(); long long x; cin >> x; if (x == -1) exit(0); return x; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector d(N); int i = 0; while (i + 2 < N) { long long ab = ask(i, i+1); long long ac = ask(i, i+2); long long bc = ask(i+1, i+2); long long A = sqrt((ab * ac) / bc); long long B = ab / A; long long C = ac / A; d[i] = A; d[i+1] = B; d[i+2] = C; i += 3; } // Handle remaining 1 or 2 digits if (i < N) { // Use previous digit if exists if (i > 0) { long long p = ask(i-1, i); d[i] = p / d[i-1]; } else { // N = 1 edge (not possible here since N ≥ 2) } } if (i + 1 < N) { long long p = ask(i, i+1); d[i+1] = p / d[i]; } // Build number long long X = 0, pw = 1; for (int i = 0; i < N; i++) { X += d[i] * pw; pw *= 10; } cout << "! " << X << endl; cout.flush(); }