#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
const int infinity = (int)1e9 + 42;
const int64_t llInfinity = (int64_t)1e18 + 256;
const int module = (int)1e9 + 7;
const long double eps = 1e-8;
mt19937_64 randGen(system_clock().now().time_since_epoch().count());
inline void raiseError(string errorCode) {
  cerr << "Error : " << errorCode << endl;
  exit(42);
}
inline basic_string<int64_t> arith(int64_t n, int64_t base, int64_t step) {
  basic_string<int64_t> res;
  for (int64_t i = 0; i < n; i++) {
    res += base;
    base += step;
  }
  return res;
}
inline int64_t ask(basic_string<int64_t> b) {
  cout << b.size();
  for (int64_t i : b) {
    cout << " " << i;
  }
  cout << endl;
  int64_t x;
  cin >> x;
  if (x == -2) {
    exit(42);
  }
  if (x == -1) {
    exit(0);
  }
  return x;
}
inline void simpleGuess(int64_t l, int64_t r, int64_t knt, int64_t att) {
  for (int64_t i = 0; i < att; i++) {
    if (r - l + 1 <= knt) {
      ask(arith(r - l + 1, l, 1));
      exit(42);
    }
    int64_t delta = (r - l + 1 - knt) / (knt + 1);
    int64_t mod = (r - l + 1 - knt) % (knt + 1);
    int64_t val = l;
    basic_string<int64_t> bounds;
    bounds += l - 1;
    for (int64_t i = 1; i <= knt; i++) {
      int64_t add = delta + (i <= mod);
      val += add;
      bounds += val;
      val++;
    }
    bounds += r + 1;
    int64_t q = ask(bounds.substr(1, knt));
    l = bounds[q] + 1;
    r = bounds[q + 1] - 1;
  }
  exit(42);
}
signed main() {
  ios_base::sync_with_stdio(false);
  if (ask({204761410474}) == 0) {
    if (ask({2046}) == 0) {
      if (ask({6}) == 0) {
        if (ask({2}) == 0) {
          ask({1});
        } else {
          ask(arith(3, 3, 1));
        }
      } else {
        int64_t q = ask({14, 30, 62, 126, 254, 510, 1022});
        int64_t w = (8 << q) - 1;
        ask(arith(w, w, 1));
      }
    } else {
      int64_t base1 = 20468427, step1 = 100020001;
      int64_t w1 = ask(arith(2047, base1, step1));
      if (w1 == 0) {
        int64_t base2 = 16382, step2 = 10001;
        int64_t w2 =
            ask(basic_string<int64_t>{4094, 8190} + arith(2045, base2, step2));
        if (w2 <= 2) {
          int64_t abase = (2048 << w2) - 1;
          ask(arith(abase, abase, 1));
        } else {
          ask(arith(10000, base2 + (w2 - 3) * step2 + 1, 1));
        }
      } else {
        simpleGuess(base1 + (w1 - 1) * step1 + 1, base1 + w1 * step1 - 1, 10000,
                    2);
      }
    }
  } else {
    simpleGuess(204761410475, 10004205361450474, 10000, 4);
  }
  return 42;
}
