#include #include #include #include using namespace std; int main() { int N; if (!(cin >> N)) return 0; vector P(N - 1); for (int i = 0; i < N - 1; ++i) { cout << "? " << i << " " << N - 1 << endl; cin >> P[i]; if (P[i] == -1) return 0; } vector cand; for (int k = 1; k <= 9; ++k) { string s = ""; bool ok = true; for (int i = 0; i < N - 1; ++i) { if (P[i] % k != 0 || P[i] / k > 9) { ok = false; break; } s += (char)('0' + (P[i] / k)); } if (ok) { string x = ""; x += (char)('0' + k); for (int i = N - 2; i >= 0; --i) x += s[i]; cand.push_back(x); } } if (cand.empty()) { cout << "! -1" << endl; } else if (cand.size() == 1) { cout << "! " << cand[0] << endl; } else { int best_a = -1, best_b = -1; for (int a = 0; a < N; ++a) { for (int b = a + 1; b < N; ++b) { set products; for (const string& s : cand) { int d_a = s[N - 1 - a] - '0'; int d_b = s[N - 1 - b] - '0'; products.insert(d_a * d_b); } if (products.size() == cand.size()) { best_a = a; best_b = b; break; } } if (best_a != -1) break; } if (best_a != -1) { cout << "? " << best_a << " " << best_b << endl; int final_p; cin >> final_p; for (const string& s : cand) { int d_a = s[N - 1 - best_a] - '0'; int d_b = s[N - 1 - best_b] - '0'; if (d_a * d_b == final_p) { cout << "! " << s << endl; return 0; } } } cout << "! -1" << endl; } return 0; }