#include <bits/stdc++.h>
using namespace std;
struct re {
  int x, y;
};
const int inf = 1e9 + 10;
const int N = 50000 + 10;
int sl, x, ans;
bool used[N];
int bitOn(int x, int i) { return x | (1 << (i - 1)); }
int getBit(int x, int i) { return 1 & (x >> (i - 1)); }
void cal(int x) {
  cout << x << ' ';
  used[x] = true;
  ++sl;
  if (sl == 100) return;
  for (int i = 8; i <= 14; ++i)
    if (getBit(x, i) == 0 && !used[bitOn(x, i)]) {
      cal(bitOn(x, i));
      if (sl == 100) return;
    }
}
void cal1(int x) {
  cout << x << ' ';
  used[x] = true;
  ++sl;
  if (sl == 100) return;
  for (int i = 1; i <= 7; ++i)
    if (getBit(x, i) == 0 && !used[bitOn(x, i)]) {
      cal1(bitOn(x, i));
      if (sl == 100) return;
    }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (int i = 1; i <= 7; ++i) x = bitOn(x, i);
  cout << "? ";
  cal(x);
  cout << endl;
  cin >> x;
  if (x == -1) return 0;
  for (int i = 1; i <= 7; ++i)
    if (getBit(x, i) == 0) ans = bitOn(ans, i);
  x = 0;
  sl = 0;
  for (int i = 8; i <= 14; ++i) x = bitOn(x, i);
  cout << "? ";
  cal1(x);
  cout << endl;
  cin >> x;
  if (x == -1) return 0;
  for (int i = 8; i <= 14; ++i)
    if (getBit(x, i) == 0) ans = bitOn(ans, i);
  cout << "! " << ans << endl;
  return 0;
}
