#include <bits/stdc++.h>
using namespace std;
long long int t, N, i, j, b, d, w, c, low, high, ans, mid, amt, secm, flag,
    mini, l, kount1, kount2, r, n, k, req, x, rem, maxi, sum, z, tot, kount,
    len, cnt, brw, brw1;
vector<long long int> v[26];
unordered_map<long long int, long long int> umap;
string s;
set<long long int> se[43];
stack<long long int> st;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int ar[6] = {4, 8, 15, 16, 23, 42};
  for (i = 0; i < 6; i++) {
    for (j = 0; j < 6; j++) {
      if (i != j) {
        se[ar[i]].insert(ar[i] * ar[j]);
      }
    }
  }
  long long int frst, sec, third, frth, fif, sx;
  cout << "? 1 2" << endl;
  fflush(stdout);
  cin >> ans;
  for (i = 0; i < 43; i++) {
    if (se[i].find(ans) != se[i].end()) {
      frst = i;
      break;
    }
  }
  for (i = 42; i >= 0; i--) {
    if (se[i].find(ans) != se[i].end()) {
      sec = i;
      break;
    }
  }
  cout << "? 1 3" << endl;
  fflush(stdout);
  cin >> ans;
  flag = 0;
  for (i = 0; i < 43; i++) {
    if (se[i].find(ans) != se[i].end()) {
      if (i == frst) {
        flag = 1;
      }
    }
  }
  if (flag == 0) {
    long long int temp = sec;
    sec = frst;
    frst = temp;
  }
  third = ans / frst;
  cout << "? 1 4" << endl;
  fflush(stdout);
  cin >> ans;
  frth = ans / frst;
  cout << "? 1 5" << endl;
  fflush(stdout);
  cin >> ans;
  fif = ans / frst;
  sx = 4 + 8 + 15 + 16 + 23 + 42 - frst - sec - third - frth - fif;
  cout << "! " << frst << " " << sec << " " << third << " " << frth << " "
       << fif << " " << sx << endl;
  fflush(stdout);
}
