#include #include #include using namespace std; int main() { int n; cin >> n; auto query = [](int a, int b) -> int { if (a > b) swap(a, b); cout << "? " << a << ' ' << b << endl; int res; cin >> res; return res; }; vector val(n), ans(n); for (int i = 0; i < n - 1; ++i) val[i] = query(i, n - 1); int id1 = -1, id2 = -1; for (int i = 0; i < n - 1; ++i) { if (val[i] > 0) { id1 = i; break; } } for (int i = n - 2; i >= 0; --i) { if (val[i] > 0) { id2 = i; break; } } if (id1 == -1 || id2 == -1) { cout << "! -1" << endl; return 0; } else if (id1 == id2) { int cnt = 0; for (int v1 = 1; v1 <= 9; ++v1) { if (val[id1] % v1 == 0 && val[id1] / v1 <= 9) ++cnt; } if (cnt > 1) { cout << "! -1" << endl; return 0; } for (int v1 = 1; v1 <= 9; ++v1) { if (val[id1] % v1 == 0 && val[id1] / v1 <= 9) { ans[n - 1] = v1; ans[id1] = val[id1] / v1; break; } } cout << "! "; for (int i = n - 1; i >= 0; --i) cout << ans[i]; cout << endl; return 0; } int tmp = query(id1, id2); int tmpv = val[id1] * val[id2] / tmp; for (int i = 1; i <= 9; ++i) { if (i * i == tmpv) { ans[n - 1] = i; break; } } for (int i = 0; i < n - 1; ++i) ans[i] = val[i] / ans[n - 1]; cout << "! "; for (int i = n - 1; i >= 0; --i) cout << ans[i]; cout << endl; }