#include <bits/stdc++.h>
using namespace std;
int ask(int a, int b) {
  int n;
  cout << "? " << a << " " << b << '\n';
  cout << flush;
  cin >> n;
  return n;
}
pair<int, int> split(int n) {
  int a[] = {4, 8, 15, 16, 23, 42};
  for (int i = 0; i < 6; i++) {
    for (int j = i + 1; j < 6; j++) {
      if (a[i] * a[j] == n) {
        return {a[i], a[j]};
      }
    }
  }
  return {0, 0};
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  vector<int> ans(6, 0);
  n = ask(1, 2);
  pair<int, int> p1 = split(n);
  n = ask(1, 3);
  pair<int, int> p2 = split(n);
  if (p1.first == p2.first)
    ans[0] = p1.first, ans[1] = p1.second, ans[2] = p2.second;
  else if (p1.first == p2.second)
    ans[0] = p1.first, ans[1] = p1.second, ans[2] = p2.first;
  else if (p1.second == p2.first)
    ans[0] = p1.second, ans[1] = p1.first, ans[2] = p2.second;
  else if (p1.second == p2.second)
    ans[0] = p1.second, ans[1] = p1.first, ans[2] = p2.first;
  n = ask(4, 5);
  p1 = split(n);
  n = ask(4, 6);
  p2 = split(n);
  if (p1.first == p2.first)
    ans[3] = p1.first, ans[4] = p1.second, ans[5] = p2.second;
  else if (p1.first == p2.second)
    ans[3] = p1.first, ans[4] = p1.second, ans[5] = p2.first;
  else if (p1.second == p2.first)
    ans[3] = p1.second, ans[4] = p1.first, ans[5] = p2.second;
  else if (p1.second == p2.second)
    ans[3] = p1.second, ans[4] = p1.first, ans[5] = p2.first;
  cout << "! ";
  for (int i = 0; i < 6; i++) {
    cout << ans[i] << " ";
  }
  cout << '\n';
  cout << flush;
  return 0;
}
