1 /**\
2 https://codeforces.com/contest/1167/problem/B
3 每日询问相邻的,能知道5个,最后一个也可以推出来
4 直接dfs暴力匹配就行,
5 询问的时候把结果存下来
6 \**/
7 #include <bits/stdc++.h>
8 using namespace std;
9
10 int q[100];
11
12 int query(int x, int y) {
13 int tmp;
14 cout << "? " << x << " " << y << "\n";
15 fflush(stdout);
16 cin >> tmp;
17 return tmp;
18 }
19
20 int vis[100], ok[100], a[7] = {0, 4, 8, 15, 16, 23, 42};
21
22 void dfs(int s) {
23 if(s == 7) {
24 int f = 0;
25 for(int i = 1; i <= 4; ++i) {
26 if(ok[i] * ok[i + 1] != q[i]) {
27 f = 1;
28 break;
29 }
30 }
31 if(!f) {
32 cout << "! ";
33 for(int i = 1; i <= 6; ++i) {
34 cout << ok[i] << " \n"[i == 6];
35 }
36 }
37 return;
38 }
39
40 for(int i = 1; i <= 6; ++i) {
41 if(!vis[i]) {
42 ok[s] = a[i];
43 vis[i] = 1;
44 dfs(s + 1);
45 vis[i] = 0;
46 }
47 }
48 }
49
50 void accept() {
51 for(int i = 1; i <= 4; ++i) q[i] = query(i, i + 1);
52
53 dfs(1);
54 }
55
56 signed main() {
57 accept();
58 return 0;
59 }