#include <bits/stdc++.h>
using namespace std;
template <class T>
void show(const vector<T> &a) {
  for (T x : a) cout << x << " ";
  cout << endl;
}
const long long N = 3e5 + 50, oo = 1e18 + 100, mod = 1e9 + 7;
const long double eps = 1e-9, PI = 2 * acos(0.0);
vector<long long> g[N];
vector<long long> visit(N, 0);
long long n, m, k;
long long cnt = 0;
vector<pair<long long, long long> > xr(N, {-1, -1});
signed main() {
  ios::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  m = (1ll << 14) - 1;
  pair<long long, long long> comp = {-1, -1};
  long long B = 100;
  vector<long long> fr, sc;
  for (long long i = 0; i < B; i++) {
    fr.push_back(i);
  }
  bool fl = true;
  for (long long j = B; j < m; j++) {
    bool can = true;
    for (long long i = 0; i < B; i++) {
      if (xr[i ^ j] != comp) {
        can = false;
      }
    }
    if (can) {
      sc.push_back(j);
      for (long long i = 0; i < B; i++) {
        xr[i ^ j] = {i, j};
      }
      if (((long long)(sc.size())) == B) break;
    }
  }
  if (((long long)(sc.size())) == B) {
    fl = false;
  }
  long long c, d;
  cout << "? ";
  for (long long i = 0; i < B; i++) cout << i << " ";
  cout << endl;
  cin >> c;
  cout << "? ";
  for (long long i = 0; i < B; i++) cout << sc[i] << " ";
  cout << endl;
  cin >> d;
  long long x = c ^ d;
  pair<long long, long long> ans = xr[x];
  cout << "! " << (c ^ ans.first) << endl;
}
