#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second // reinier.cpp adapted by Wessel #define pb push_back #define eb emplace_back #define all(v) (v).begin(), (v).end() const ll MOD = 1000000007; const ll D = 18; // too large void run() { srand(time(0)); ll v = 0; unordered_map M; bool duplicates = true; while(duplicates) { duplicates = false; M = unordered_map(); v = rand() % MOD; for(ll bm = 0; bm < (1 << D); bm++) { ll r = 0; for(ll bmc = bm, i = 0; i < D; i++, bmc /= 2) { if(bmc % 2 == 1) { r *= v; } else { r += v; } r %= MOD; } if(M.find(r) != M.end()) { duplicates = true; break; } M[r] = bm; } } ll n; cin >> n; vi res(n, 0); for(ll todo = n; todo > 0; todo -= D) { vi A(n + 1); for(ll i = 0; i <= n; i++) { if(i <= todo - D || i == 0) { A[i] = 0; } else if(i <= todo) { A[i] = v; } else { A[i] = res[i - 1]; } } cout << "?"; for(ll i = 0; i <= n; i++) { cout << " " << A[i]; } cout << endl; ll r; cin >> r; ll bm = M[r]; for(ll bmc = bm, i = 0; i < D; i++, bmc /= 2) { if(todo - D + i >= 0) res[todo - D + i] = bmc % 2; } } cout << "! "; for(ll i = 0; i < n; i++) { if(res[i] == 0) { cout << "+"; } else { cout << "x"; } } cout << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); run(); return 0; }