#include <bits/stdc++.h>
using namespace std;
const long long MOD = (long long)1e9 + 7;
const long long MOD1 = 2286661337;
const long long MOD2 = 998244353;
const int INF = (int)1e9 + 7;
const double EPS = 1e-7;
const int N = (int)1e2;
int n, cur[N], cnt[N], r;
pair<int, int> vals, nxt, nxt1;
bool is_null[N];
pair<int, int> ask(int ind) {
  cout << "+ " << ind << endl;
  ++cnt[ind - 1];
  pair<int, int> ans;
  cin >> ans.first >> ans.second;
  return ans;
}
int find_(int k) {
  for (int i = n + 2 - 1; i >= 0; --i) {
    if (i * (i - 1) / 2 == k) {
      return i;
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> vals.first >> vals.second;
  fill(cur, cur + n, -1);
  vals = ask(1);
  nxt = ask(2);
  if (nxt.second - vals.second == 0) {
    is_null[2] = true;
  }
  vals = nxt;
  nxt1 = ask(3);
  if (is_null[2]) {
    cur[2] = 1;
  } else {
    cur[2] = find_(nxt1.first - vals.first) + 1;
  }
  nxt = ask(1);
  cur[1] = (nxt.second - nxt1.second) / cur[2];
  cur[0] = find_(nxt.first - nxt1.first) + 1;
  r = nxt1.second - vals.second - (cur[0] - 1) * cur[1];
  if (!r) {
    is_null[3] = true;
  }
  vals = nxt;
  for (int i = 3; i < n - 1; ++i) {
    nxt = ask(i + 1);
    if (is_null[i]) {
      cur[i] = 1;
    } else {
      cur[i] = find_(nxt.first - vals.first) + 1;
    }
    r = nxt.second - vals.second - cur[i - 1] * cur[i - 2];
    if (!r) {
      is_null[i + 1] = true;
    }
    vals = nxt;
  }
  for (int i = 0; i < n - 3; ++i) {
    vals.second -= cur[i] * cur[i + 1] * cur[i + 2];
  }
  vals.second /= cur[n - 3] * cur[n - 2];
  cur[n - 1] = vals.second;
  cout << "!";
  for (int i = 0; i < n; ++i) {
    cout << " " << cur[i] - cnt[i];
  }
  cout << endl;
  return 0;
}
