#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;
}
