#include <bits/stdc++.h>
using namespace std;
long long int n;
pair<long long int, long long int> query(long long int x) {
  cout << "+ " << x << endl;
  pair<long long int, long long int> p;
  cin >> p.first >> p.second;
  return p;
}
void answer(vector<long long int>& ans) {
  cout << "! ";
  for (long long int i = 1; i <= n; i++) cout << ans[i] << " ";
  cout << endl;
}
int32_t main() {
  map<long long int, long long int> diff;
  for (long long int i = 2; i <= 102; i++) {
    diff[i * (i - 1) * (i - 2) / 6 - (i - 1) * (i - 2) * (i - 3) / 6] = i;
  }
  long long int a, b;
  cin >> n;
  pair<long long int, long long int> Q[n + 1];
  vector<long long int> ans(n + 5, -1);
  cin >> Q[0].first >> Q[0].second;
  Q[1] = query(2);
  Q[2] = query(1);
  Q[3] = query(3);
  Q[4] = query(1);
  ans[1] = diff[Q[4].first - Q[3].first] - 2;
  ans[2] = (Q[4].second - Q[3].second) - (Q[2].second - Q[1].second) - 1;
  if (Q[2].second - Q[1].second == 0)
    ans[3] = 0;
  else
    ans[3] = diff[Q[3].first - Q[2].first] - 1;
  if (Q[3].second - Q[2].second == (ans[1] + 1) * (ans[2] + 1)) ans[4] = 0;
  Q[3] = Q[4];
  for (long long int i = 4; i < n; i++) {
    Q[i] = query(i);
    if (Q[i].second - Q[i - 1].second == (ans[i - 2] + 1) * (ans[i - 1] + 1))
      ans[i + 1] = 0;
    if (ans[i] == -1) {
      ans[i] = diff[Q[i].first - Q[i - 1].first] - 1;
    }
  }
  for (long long int i = 3; i <= n - 1; i++) {
    Q[n - 1].second -=
        (ans[i - 2] + (i == 3 ? 2 : 1)) * (ans[i - 1] + 1) * (ans[i] + 1);
  }
  ans[n] = Q[n - 1].second / ((ans[n - 2] + 1) * (ans[n - 1] + 1));
  answer(ans);
}
