#include <bits/stdc++.h>
using namespace std;
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long a1, a2, a3, a4, a5, a6;
  long long a[6] = {4, 8, 15, 16, 23, 42};
  long long x, y, v, w;
  cout << "? 1 2" << endl;
  cin >> x;
  cout << "? 1 3" << endl;
  cin >> y;
  cout << "? 4 5" << endl;
  cin >> v;
  cout << "? 4 6" << endl;
  cin >> w;
  pair<long long, long long> a12, a13, a45, a46;
  for (long long i = 0; i < 6; i++) {
    if (x % a[i] == 0 && binary_search(a, a + 6, x / a[i])) {
      a12.first = a[i];
      a12.second = (x / a[i]);
    }
    if (y % a[i] == 0 && binary_search(a, a + 6, y / a[i])) {
      a13.first = a[i];
      a13.second = (y / a[i]);
    }
    if (v % a[i] == 0 && binary_search(a, a + 6, v / a[i])) {
      a45.first = a[i];
      a45.second = (v / a[i]);
    }
    if (w % a[i] == 0 && binary_search(a, a + 6, w / a[i])) {
      a46.first = a[i];
      a46.second = (w / a[i]);
    }
  }
  if (a12.first == a13.first) {
    a1 = a12.first, a2 = a12.second, a3 = a13.second;
  }
  if (a12.first == a13.second) {
    a1 = a12.first;
    a2 = a12.second;
    a3 = a13.first;
  }
  if (a12.second == a13.first) {
    a1 = a12.second;
    a2 = a12.first;
    a3 = a13.second;
  }
  if (a12.second == a13.second) {
    a1 = a12.second;
    a2 = a12.first;
    a3 = a13.first;
  }
  if (a45.first == a46.first) {
    a4 = a45.first, a5 = a45.second, a6 = a46.second;
  }
  if (a45.first == a46.second) {
    a4 = a45.first;
    a5 = a45.second;
    a6 = a46.first;
  }
  if (a45.second == a46.first) {
    a4 = a45.second;
    a5 = a45.first;
    a6 = a46.second;
  }
  if (a45.second == a46.second) {
    a4 = a45.second;
    a5 = a45.first;
    a6 = a46.first;
  }
  cout << "! " << a1 << " " << a2 << " " << a3 << " " << a4 << " " << a5 << " "
       << a6 << endl;
  return 0;
}
