#include <bits/stdc++.h>
using namespace std;
const long long maxN = (1e2) + 5;
pair<long long, long long> v[maxN];
inline void query(long long x) {
  long long xq, yq;
  printf("+ %lld\n", x);
  fflush(stdout);
  scanf("%lld%lld", &xq, &yq);
  v[x].first = xq;
  v[x].second = yq;
}
long long x, y, n, root[maxN * maxN], sol[maxN];
int main() {
  scanf("%lld", &n);
  for (long long i = 1; i <= 102; i++) root[i * (i - 1) / 2] = i;
  scanf("%lld%lld", &v[n].first, &v[n].second);
  for (long long i = n - 1; i >= 3; i--) query(i);
  query(1);
  query(2);
  printf("+ 1\n");
  fflush(stdout);
  scanf("%lld%lld", &x, &y);
  long long deltax = x - v[2].first;
  long long deltay = y - v[2].second;
  sol[1] = root[deltax] - 1;
  long long fdeltay = v[1].second - v[3].second;
  sol[3] = deltay - fdeltay - 1;
  sol[2] = deltay / (sol[3] + 1) - 1;
  deltax = v[4].first - v[5].first;
  if (n != 4 && deltax != 0)
    sol[4] = root[deltax];
  else {
    deltay = v[2].second - v[1].second;
    deltay -= (sol[3] + 1) * (sol[1] + 1);
    sol[4] = deltay / (sol[3] + 1) - 1;
    if (n == 4) sol[4]++;
  }
  for (long long i = 5; i <= n; i++) {
    long long deltax = v[i].first - v[i + 1].first;
    if (i != n && deltax)
      sol[i] = root[deltax];
    else {
      long long deltay = v[i - 2].second - v[i - 1].second;
      deltay -= (sol[i - 1] + 1) * sol[i - 3];
      deltay -= sol[i - 3] * sol[i - 4];
      sol[i] = deltay / (sol[i - 1] + 1) - 1;
      if (i == n) sol[i]++;
    }
  }
  printf("! ");
  for (long long i = 1; i <= n; i++) {
    if (sol[i] == -1) sol[i] = 0;
    printf("%lld ", sol[i]);
  }
  printf("\n");
  return 0;
}
