#include <bits/stdc++.h>
using namespace std;
int mul[10];
int ans[10];
int a[10];
int b[10];
const int arr[] = {0, 4, 8, 15, 16, 23, 42};
void get(int &x, int &y, int mu) {
  for (int i = 1; i <= 6; i++) {
    for (int j = i + 1; j <= 6; j++) {
      if (arr[i] * arr[j] == mu) {
        x = i;
        y = j;
        return;
      }
    }
  }
}
int buk[10];
int main(void) {
  printf("? 1 2\n");
  fflush(stdout);
  scanf("%d", &mul[1]);
  printf("? 2 3\n");
  fflush(stdout);
  scanf("%d", &mul[2]);
  printf("? 3 4\n");
  fflush(stdout);
  scanf("%d", &mul[3]);
  printf("? 4 5\n");
  fflush(stdout);
  scanf("%d", &mul[4]);
  for (int i = 1; i <= 4; i++) {
    get(a[i], b[i], mul[i]);
  }
  for (int i = 1; i <= 3; i++) {
    if (a[i] == a[i + 1]) {
      ans[i + 1] = a[i];
    }
    if (b[i] == b[i + 1]) {
      ans[i + 1] = b[i];
    }
    if (a[i] == b[i + 1]) {
      ans[i + 1] = a[i];
    }
    if (b[i] == a[i + 1]) {
      ans[i + 1] = b[i];
    }
  }
  if (a[1] == ans[2])
    ans[1] = b[1];
  else
    ans[1] = a[1];
  if (a[4] == ans[4])
    ans[5] = b[4];
  else
    ans[5] = a[4];
  for (int i = 1; i <= 5; i++) buk[ans[i]]++;
  for (int i = 1; i <= 6; i++)
    if (buk[i] == 0) ans[6] = i;
  printf("! ");
  for (int i = 1; i <= 6; i++) printf("%d%c", arr[ans[i]], i == 6 ? '\n' : ' ');
}
