#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n; cin >> n; vector P(n, 0); // P[i] = digit[i] * digit[n-1] vector digit(n, 0); // digit[i] = 10^i の位 auto ask = [&](ll a, ll b) -> ll { cout << "? " << a << " " << b << endl; ll p; cin >> p; if (p == -1) exit(0); return p; }; vector pos; for (int i = 0; i < n - 1; i++) { P[i] = ask(i, n - 1); if (P[i] > 0) pos.push_back(i); } if (pos.empty()) { cout << "! -1" << endl; return 0; } if (pos.size() == 1) { int k = pos[0]; ll p = P[k]; vector> cand; // {最上位桁, k桁目} for (int msd = 1; msd <= 9; msd++) { for (int x = 1; x <= 9; x++) { if (msd * x == p) { cand.push_back({msd, x}); } } } if (cand.size() != 1) { cout << "! -1" << endl; return 0; } digit[n - 1] = cand[0].first; digit[k] = cand[0].second; cout << "! "; for (int i = n - 1; i >= 0; i--) cout << digit[i]; cout << endl; return 0; } int i = pos[0]; int j = pos[1]; ll q = ask(i, j); // digit[i] * digit[j] ll sq = P[i] * P[j] / q; // digit[n-1]^2 int msd = -1; for (int d = 1; d <= 9; d++) { if (d * d == sq) msd = d; } digit[n - 1] = msd; for (int k = 0; k < n - 1; k++) { digit[k] = P[k] / msd; } cout << "! "; for (int k = n - 1; k >= 0; k--) cout << digit[k]; cout << endl; }