#include <bits/stdc++.h>
using namespace std;
long long M = 10004205361450474;
vector<long long> que;
long long mx = 1e4;
long long curq;
long long opt[6];
long long optf(long long x) {
  if (x == 1) {
    return opt[1] = mx;
  }
  long long a, b, c, d, i, j;
  a = optf(x - 1);
  return opt[x] = a * (mx + 1) + mx;
}
long long dp(long long nq, long long bg) {
  ;
  if ((bg >= mx && curq != nq)) {
    return bg + opt[nq];
  }
  if ((curq != 1) && (nq == 1)) {
    return bg + min(mx, bg);
  }
  if (nq == 0) {
    return bg;
  }
  long long a, b, c, d, i, j, k;
  c = bg;
  for (i = 0; i < min(bg, mx); i++) {
    a = dp(nq - 1, c);
    if (nq == curq) que.push_back(a);
    c = a + 1;
  }
  c = dp(nq - 1, c);
  return c;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(25);
  long long a, b, c, d, i, j, k;
  a = 1;
  long long q = 5;
  optf(5);
  while (true) {
    que.clear();
    ;
    curq = q;
    dp(q, a);
    q--;
    cout << que.size() << "\n";
    for (auto z : que) {
      cout << z << " ";
    }
    cout << flush;
    cin >> b;
    ;
    if (b == -1) break;
    if (b != 0) {
      a = que[b - 1] + 1;
    }
  }
  return 0;
}
