#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000001;
const long double EPS = 1e-9;
const int MOD = 1000000007;
const long long LLINF = 1000000000000000001;
const long long M = 10004205361450474;
map<pair<long long, long long>, long long> sdp;
const long long maxl = 10000;
long long dp(long long l, long long q);
long long dpr(long long l, long long q) {
  if (sdp.count({l, q}) == 0) {
    if (q == 0)
      sdp[make_pair(l, q)] = 0;
    else if (q == 1)
      sdp[make_pair(l, q)] = l + l - 1;
    else {
      long long r = l;
      for (int i = 1; i <= l + 1; i++) r = dp(r, q - 1) + 2;
      sdp[make_pair(l, q)] = r - 2;
    }
  }
  return sdp[make_pair(l, q)];
}
long long dp(long long l, long long q) {
  if (l > maxl)
    return dpr(maxl, q) + l - maxl;
  else {
    long long r = dpr(l, q);
    return r;
  }
}
vector<long long> path(long long l, long long q) {
  if (q > 1) {
    vector<long long> ans;
    long long r = l;
    for (int i = 1; i <= min(l, maxl); i++) {
      r = dp(r, q - 1) + 2;
      if (r - 1 >= M) {
        ans.push_back(M);
        return ans;
      }
      ans.push_back(r - 1);
    }
    return ans;
  } else {
    vector<long long> ans;
    for (int i = 0; i <= min(l, maxl) - 1; i++) {
      ans.push_back(l + i);
    }
    return ans;
  }
}
long long ask(vector<long long> &p) {
  cout << ((int)(p).size()) << ' ';
  for (auto i : p) cout << i << ' ';
  cout << endl;
  int z;
  cin >> z;
  if (z < 0)
    exit(0);
  else
    return z;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long beg = 1;
  for (int q = 5; q >= 1; q--) {
    auto p = path(beg, q);
    int z = ask(p);
    if (z != 0) beg = p[z - 1] + 1;
  }
}
