#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int n, a[N], b[N], A[4], B[4], x[N], rnk[10000], t, s;
void ask(int i, int op) {
  printf("+ %d\n", i);
  fflush(stdout);
  if (!op) {
    scanf("%d %d", &a[i], &b[i]);
    int tmp = a[i];
    a[i] -= t;
    t = tmp;
    tmp = b[i];
    b[i] -= s;
    s = tmp;
  } else {
    scanf("%d %d", &A[op], &B[op]);
    int tmp = A[op];
    A[op] -= t;
    t = tmp;
    tmp = B[op];
    B[op] -= s;
    s = tmp;
  }
}
int q(int a, int b) {
  if (!a && !b)
    return 0;
  else if (!a)
    return 1;
  else
    return rnk[a];
}
int main() {
  scanf("%d", &n);
  scanf("%d %d", &t, &s);
  for (int i = 1; i <= n; ++i) rnk[(i - 1) * i / 2] = i;
  for (int i = n - 1; i >= 3; --i) ask(i, 0);
  ask(1, 1);
  ask(2, 2);
  ask(1, 3);
  x[1] = q(A[1], A[3]);
  x[3] = B[3] - B[1] - 1;
  x[2] = B[1] / (x[3] + 1);
  x[4] = B[2] / (x[3] + 1) - x[1] - 2;
  for (int i = 3; i <= n - 2; ++i)
    x[i + 2] = (b[i] - x[i - 1] * x[i - 2]) / (x[i + 1] + 1) - x[i - 1] - 1;
  ++x[n];
  printf("! ");
  for (int i = 1; i <= n; ++i) printf("%d ", x[i]);
  printf("\n");
  fflush(stdout);
  return 0;
}
