#include <bits/stdc++.h>
using namespace std;
int main() {
  int n = 6;
  vector<int> A(n);
  vector<int> B(n);
  A[0] = 4;
  A[1] = 8;
  A[2] = 15;
  A[3] = 16;
  A[4] = 23;
  A[5] = 42;
  map<int, pair<int, int> > S;
  for (int i = 0; i < 5; i++) {
    for (int j = i + 1; j < 6; j++) S[A[i] * A[j]] = {A[i], A[j]};
  }
  vector<int> quer(4);
  cout << "? " << 1 << " " << 6 << "\n";
  fflush(stdout);
  int temp;
  cin >> temp;
  quer[0] = temp;
  cout << "? " << 2 << " " << 6 << "\n";
  fflush(stdout);
  cin >> temp;
  quer[1] = temp;
  cout << "? " << 3 << " " << 5 << "\n";
  fflush(stdout);
  cin >> temp;
  quer[2] = temp;
  cout << "? " << 4 << " " << 5 << "\n";
  fflush(stdout);
  cin >> temp;
  quer[3] = temp;
  pair<int, int> t = S[quer[0]];
  int num1 = t.first;
  int num2 = t.second;
  pair<int, int> t2 = S[quer[1]];
  int num3 = t2.first;
  int num4 = t2.second;
  if (num1 == num3 || num1 == num4) {
    B[5] = num1;
    B[0] = num2;
    if (num3 == num1)
      B[1] = num4;
    else
      B[1] = num3;
  } else if (num2 == num3 || num2 == num4) {
    B[5] = num2;
    B[0] = num1;
    if (num3 == num2)
      B[1] = num4;
    else
      B[1] = num3;
  }
  t = S[quer[2]];
  num1 = t.first;
  num2 = t.second;
  t2 = S[quer[3]];
  num3 = t2.first;
  num4 = t2.second;
  if (num1 == num3 || num1 == num4) {
    B[4] = num1;
    B[2] = num2;
    if (num3 == num1)
      B[3] = num4;
    else
      B[3] = num3;
  } else if (num2 == num3 || num2 == num4) {
    B[4] = num2;
    B[2] = num1;
    if (num3 == num2)
      B[3] = num4;
    else
      B[3] = num3;
  }
  cout << "! ";
  for (int i = 0; i < n; i++) cout << B[i] << " ";
  cout << "\n";
  fflush(stdout);
}
