#include <bits/stdc++.h>   using namespace std;   const int p = 1000003;   const int n = 10;   int inv[1000005], a[15][15], ans[15];   int read() {     char c = getchar();     int x = 0, f = 1;     while (c <  0  || c >  9 ) {       if (c ==  - ) f = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) {       x = x * 10 + c -  0 ;       c = getchar();     }     return x * f;   }   int calc(int x) {     int res = 0;     for (int i = n; i >= 0; i--) res = (1LL * res * x + ans[i]) % p;     return res;   }   int main() {     inv[1] = 1;     for (int i = 2; i < p; i++) inv[i] = 1LL * (p - p / i) * inv[p % i] % p;     printf( ? 0 n );     fflush(stdout);     ans[0] = read();     for (int i = 1; i <= n; i++) {       printf( ? %d n , i);       fflush(stdout);       a[i][0] = 1;       for (int j = 1; j <= n; j++) a[i][j] = a[i][j - 1] * i % p;       a[i][n + 1] = (read() + p - ans[0]) % p;     }     for (int i = 1; i <= n; i++) {       for (int j = i + 1; j <= n; j++) {         int t = 1LL * a[j][i] * inv[a[i][i]] % p;         for (int k = i + 1; k <= n + 1; k++)           a[j][k] = (a[j][k] + p - 1LL * a[i][k] * t % p) % p;         a[j][i] = 0;       }     }     for (int i = n; i >= 1; i--) {       int res = a[i][n + 1];       for (int j = i + 1; j <= n; j++)         res = (res + p - 1LL * a[i][j] * ans[j] % p) % p;       ans[i] = 1LL * res * inv[a[i][i]] % p;     }     for (int i = 0; i < p; i++) {       if (calc(i) == 0) {         printf( ! %d n , i);         fflush(stdout);         exit(0);       }     }     printf( ! -1 n );     fflush(stdout);     return 0;   }   