#include <bits/stdc++.h>
using namespace std;
void solve() {
  vector<long long> last, first;
  set<long long> k;
  for (long long i = 0; i < (1 << 14) - 1; i++) {
    vector<long long> b(14, 0);
    long long l = 13;
    long long cur = i;
    while (cur > 0) {
      b[l] = cur % 2;
      l--;
      cur /= 2;
    }
    long long fl = 0;
    for (long long i = 0; i < 7; i++)
      if (b[i]) {
        fl = 1;
        break;
      }
    long long fl2 = 0;
    for (long long i = 7; i < 14; i++)
      if (b[i]) {
        fl2 = 1;
        break;
      }
    if (!fl and (long long) first.size() < 100)
      first.push_back(i);
    else if (!fl2 and (long long) last.size() < 100)
      last.push_back(i);
    if ((long long)first.size() == 100 and (long long) last.size() == 100)
      break;
  }
  cout << "? ";
  for (long long i = 0; i < 100; i++) cout << last[i] << " ";
  cout << '\n';
  fflush(stdout);
  long long x1;
  cin >> x1;
  cout << "? ";
  for (long long i = 0; i < 100; i++) cout << first[i] << " ";
  cout << '\n';
  fflush(stdout);
  long long x2;
  cin >> x2;
  vector<long long> bit1(14, 0);
  long long c = 13;
  while (x1) {
    bit1[c] = x1 % 2;
    c--;
    x1 /= 2;
  }
  vector<long long> bit2(14, 0);
  c = 13;
  while (x2) {
    bit2[c] = x2 % 2;
    c--;
    x2 /= 2;
  }
  long long ans = 0;
  for (long long i = 0; i < 7; i++) ans = 2 * ans + bit2[i];
  for (long long i = 7; i < 14; i++) ans = 2 * ans + bit1[i];
  cout << "! " << ans << '\n';
  fflush(stdout);
}
signed main() {
  solve();
  return 0;
}
