#include using namespace std; using pii = pair; using ll = long long; const int N = 2000010, MOD = 998244353, INF = 0x3f3f3f3f; int n, m, w[N]; int ask(int a, int b) { printf("? %d %d\n", n - b, n - a); fflush(stdout); scanf("%d", &a); return a; } void solve() { scanf("%d", &n); vector v = {0, 0}; for (int i = 2; i < n + 1; i++) v.push_back(ask(1, i)); for (int i = 2; i < n + 1; i++) if (v[i]) { for (int j = i + 1; j < n + 1; j++) if (v[j]) { v[1] = sqrt(v[i] * v[j] / ask(i, j)); break; } break; } if (!v[1]) { for (int i = 2; i < n + 1; i++) if (v[i]) { if (v[i] == 1) v[1] = v[i] = 1; else if (v[i] == 25) v[1] = v[i] = 5; else if (v[i] == 49) v[1] = v[i] = 7; else if (v[i] == 64) v[1] = v[i] = 8; else if (v[i] == 81) v[1] = v[i] = 9; else continue; printf("! %d", v[1]); for (int i = 2; i < n + 1; i++) printf("%d", v[i]); puts(""); fflush(stdout); return; } puts("! -1"); fflush(stdout); return; } printf("! %d", v[1]); for (int i = 2; i < n + 1; i++) printf("%d", v[i] / v[1]); puts(""); fflush(stdout); } int main() { int T = 1; // cin >> T; while (T--) solve(); return 0; }