#include <bits/stdc++.h>
using namespace std;
struct sss {
  long long mul;
  long long a, b;
} q[100005];
long long num;
int A[6] = {4, 8, 15, 16, 23, 42};
int vis[10];
int main() {
  for (int i = 0; i < 6; i++)
    for (int j = i + 1; j < 6; j++) {
      if (i == j) continue;
      q[num].mul = A[i] * A[j];
      q[num].a = A[i];
      q[num].b = A[j];
      num++;
    }
  int pos;
  int a, b, c, d;
  cout << "? 1 2" << endl;
  fflush(stdout);
  cin >> pos;
  for (int i = 0; i < num; i++) {
    if (q[i].mul == pos) {
      a = q[i].a;
      b = q[i].b;
      break;
    }
  }
  cout << "? 1 3" << endl;
  fflush(stdout);
  cin >> pos;
  for (int i = 0; i < num; i++) {
    if (q[i].mul == pos) {
      c = q[i].a;
      d = q[i].b;
      break;
    }
  }
  if (a == c) {
    vis[1] = a;
    vis[2] = b;
    vis[3] = d;
  } else if (b == d) {
    vis[1] = b;
    vis[2] = a;
    vis[3] = c;
  } else if (b == c) {
    vis[1] = b;
    vis[2] = a;
    vis[3] = d;
  } else if (a == d) {
    vis[1] = a;
    vis[2] = b;
    vis[3] = c;
  }
  cout << "? 4 5" << endl;
  fflush(stdout);
  cin >> pos;
  for (int i = 0; i < num; i++) {
    if (q[i].mul == pos) {
      a = q[i].a;
      b = q[i].b;
      break;
    }
  }
  cout << "? 4 6" << endl;
  fflush(stdout);
  cin >> pos;
  for (int i = 0; i < num; i++) {
    if (q[i].mul == pos) {
      c = q[i].a;
      d = q[i].b;
      break;
    }
  }
  if (a == c) {
    vis[4] = a;
    vis[5] = b;
    vis[6] = d;
  } else if (b == d) {
    vis[4] = b;
    vis[5] = a;
    vis[6] = c;
  } else if (b == c) {
    vis[4] = b;
    vis[5] = a;
    vis[6] = d;
  } else if (a == d) {
    vis[4] = a;
    vis[5] = b;
    vis[6] = c;
  }
  cout << "!";
  for (int i = 1; i <= 6; i++) cout << " " << vis[i];
  cout << endl;
  fflush(stdout);
  return 0;
}
