#include <bits/stdc++.h>   namespace IO {   char gc() { return getchar(); }   template <typename Tp>   bool get1(Tp &x) {     bool neg = 0;     char c = gc();     while (c != EOF && (c <  0  || c >  9 ) && c !=  - ) c = gc();     if (c ==  - ) c = gc(), neg = 1;     if (c == EOF) return false;     x = 0;     for (; c >=  0  && c <=  9 ; c = gc()) x = x * 10 + c -  0 ;     if (neg) x = -x;     return true;   }   template <typename Tp>   void printendl(Tp x) {     if (x < 0) putchar( - ), x = -x;     static short a[40], sz;     sz = 0;     while (x > 0) a[sz++] = x % 10, x /= 10;     if (sz == 0) putchar( 0 );     for (int i = sz - 1; i >= 0; i--) putchar( 0  + a[i]);     puts(  );   }   }  // namespace IO   using IO::get1;   using IO::printendl;   const int inf = 0x3f3f3f3f;   const long long Linf = 1ll << 61;   const int maxn = 111;   int n, q1, q2, a[maxn], b[maxn], c[maxn], ans[maxn];   int d[maxn];   void getv(int id) {     for (int i = 1; i <= n; i++) a[id] += d[i] * (d[i] - 1) * (d[i] - 2) / 6;     for (int i = 1; i <= n - 2; i++) b[id] += d[i] * d[i + 1] * d[i + 2];   }   int main() {     get1(n);     get1(a[0]) && get1(b[0]);     for (int i = 1; i <= n; i++) {       c[i] = (i < n ? i : 1);       printf( + %d n , c[i]);       fflush(stdout);       get1(a[i]) && get1(b[i]);     }     for (int i = n; i >= 1; i--) {       a[i] -= a[i - 1];       b[i] -= b[i - 1];     }     memset(ans, -1, sizeof(ans));     ans[1] = (a[n] - a[1]);     for (int i = 2; i < n; i++)       if (a[i]) {         ans[i] = 0;         while (ans[i] * (ans[i] - 1) / 2 < a[i]) ans[i]++;       }     if (ans[3] == -1) ans[3] = (b[2] > 0);     if (ans[2] == -1) ans[2] = b[n] / (ans[3] + 1) - 1;     for (int i = 3; i < n - 1; i++) {       b[i] -= (ans[i - 1] + 1) * (ans[i - 2] + 1);       if (ans[i + 1] == -1) ans[i + 1] = (b[i] > 0);     }     ans[n] = (b[n - 1] - (ans[n - 2] + 1) * (ans[n - 3] + 1)) / (ans[n - 2] + 1);     printf( ! );     for (int i = 1; i <= n; i++) printf(  %d , ans[i]);     puts(  );     return 0;   }   