#include <bits/stdc++.h>
using namespace std;
int main() {
  int a[6] = {4, 8, 15, 16, 23, 42}, x, y, m, n, p, q, answer[6] = {0};
  printf("? 1 2\n");
  fflush(stdout);
  cin >> x;
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      if (x == a[i] * a[j]) {
        m = a[i];
        n = a[j];
        break;
      }
    }
  }
  printf("? 1 3\n");
  fflush(stdout);
  cin >> y;
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      if (y == a[i] * a[j]) {
        p = a[i];
        q = a[j];
        break;
      }
    }
  }
  if (m == p) {
    answer[0] = m;
    answer[1] = n;
    answer[2] = q;
  } else if (m == q) {
    answer[0] = m;
    answer[1] = n;
    answer[2] = p;
  } else {
    answer[0] = n;
    answer[1] = m;
    answer[2] = y / n;
  }
  printf("? 4 5\n");
  fflush(stdout);
  cin >> x;
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      if (x == a[i] * a[j]) {
        m = a[i];
        n = a[j];
        break;
      }
    }
  }
  printf("? 4 6\n");
  fflush(stdout);
  cin >> y;
  for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
      if (y == a[i] * a[j]) {
        p = a[i];
        q = a[j];
        break;
      }
    }
  }
  if (m == p) {
    answer[3] = m;
    answer[4] = n;
    answer[5] = q;
  } else if (m == q) {
    answer[3] = m;
    answer[4] = n;
    answer[5] = p;
  } else {
    answer[3] = n;
    answer[4] = m;
    answer[5] = y / n;
  }
  cout << "! ";
  for (int i = 0; i < 6; i++) {
    cout << answer[i] << " ";
  }
  return 0;
}
