#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
const int q = 5;
long long dp[q][maxn];
long long M = 10004205361450474;
long long ask(int m, long long l) {
  long long r;
  if (l > 1e4)
    r = (dp[m][10000] - 10000LL + l);
  else
    r = dp[m][l];
  if (r > M) r = M;
  return r;
}
vector<long long> gen(int m, long long l) {
  vector<long long> res;
  long long r = ask(m - 1, l);
  r++;
  res.push_back(r);
  r++;
  for (int i = 0; i < min(l - 1, 9999LL); i++) {
    r = ask(m - 1, r);
    r++;
    if (r > M) break;
    res.push_back(r);
    r++;
  }
  if (res[0] > M) {
    vector<long long> r2;
    r2.push_back(M);
    return r2;
  }
  int s = res.size() - 1;
  while (s >= 1 && res[s] > M && res[s - 1] > M) {
    s--;
    res.pop_back();
  }
  if (res[s] > M) res[s] = M;
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  int n = 1e4;
  for (int i = 1; i <= n; i++) {
    dp[0][i] = 2 * i - 1;
  }
  for (int m = 1; m < q; m++) {
    for (int i = 1; i <= n; i++) {
      long long r = ask(m - 1, i);
      r += 2;
      for (int j = 0; j < i; j++) {
        r = ask(m - 1, r);
        r += 2;
      }
      r -= 2;
      dp[m][i] = r;
    }
  }
  long long l = 1;
  for (int m = 4; m > 0; m--) {
    vector<long long> r = gen(m, l);
    cout << r.size() << endl;
    for (long long b : r) {
      cout << b << " ";
    }
    cout << endl;
    int i;
    cin >> i;
    if (i == -1 || i == -2) return 0;
    if (i > 0) {
      l = r[i - 1] + 1;
    }
    if (i < r.size()) M = r[i] - 1;
  }
  cout << M - l + 1 << endl;
  for (long long i = l; i <= M; i++) cout << i << " ";
  cout << endl;
  return 0;
}
