#include <bits/stdc++.h>
using namespace std;
int main() {
  int special_numbers[] = {4, 8, 15, 16, 23, 42};
  map<int, pair<int, int> > mp;
  for (int i = 0; i < 5; i++) {
    for (int j = i + 1; j < 6; j++) {
      mp[special_numbers[i] * special_numbers[j]] =
          make_pair(special_numbers[i], special_numbers[j]);
    }
  }
  int p1, p2, p3, p4;
  int s1, s2, s3, s4, s5, s6;
  cout << "? 1 2" << endl;
  cout.flush();
  cin >> p1;
  cout << "? 2 3" << endl;
  cout.flush();
  cin >> p2;
  cout << "? 4 5" << endl;
  cout.flush();
  cin >> p3;
  cout << "? 5 6" << endl;
  cout.flush();
  cin >> p4;
  s1 = mp[p1].first;
  s2 = mp[p1].second;
  if (s2 == mp[p2].first) {
    s3 = mp[p2].second;
  } else if (s2 == mp[p2].second) {
    s3 = mp[p2].first;
  } else if (s1 == mp[p2].first) {
    s1 = s2;
    s2 = mp[p2].first;
    s3 = mp[p2].second;
  } else if (s1 == mp[p2].second) {
    s1 = s2;
    s2 = mp[p2].second;
    s3 = mp[p2].first;
  }
  s4 = mp[p3].first;
  s5 = mp[p3].second;
  if (s5 == mp[p4].first) {
    s6 = mp[p4].second;
  } else if (s5 == mp[p4].second) {
    s6 = mp[p4].first;
  } else if (s4 == mp[p4].first) {
    s4 = s5;
    s5 = mp[p4].first;
    s6 = mp[p4].second;
  } else if (s4 == mp[p4].second) {
    s4 = s5;
    s5 = mp[p4].second;
    s6 = mp[p4].first;
  }
  cout << "! " << s1 << " " << s2 << " " << s3 << " " << s4 << " " << s5 << " "
       << s6 << endl;
  cout.flush();
  return 0;
}
