#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, const U &b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, const U &b) {
  if (a < b) a = b;
}
const long long mx = 10004205361450474LL;
int query(long long *first, int n) {
  printf("%d", n);
  for (int i = 0; i < n; i++) printf(" %I64d", first[i]);
  puts("");
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  if (ans == -1) exit(0);
  return ans;
}
int query(long long first) {
  printf("1 %I64d\n", first);
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  if (ans == -1) exit(0);
  return ans;
}
int query(long long L, long long R) {
  printf("%I64d", R - L + 1);
  for (long long i = L; i <= R; i++) printf(" %I64d", i);
  puts("");
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  if (ans == -1) exit(0);
  return ans;
}
long long arr[11111];
int main() {
  if (query(204761410474LL)) {
    long long L = 204761410475LL, R = 10004205361450474LL;
    while (R - L + 1 > 10000) {
      int n = 10000;
      long long len = (R - L + 2) / (n + 1);
      long long cur = L - 1;
      for (int i = 0; i <= n; i++) arr[i] = cur, cur += len;
      arr[n + 1] = R + 1;
      int p = query(arr + 1, n);
      L = arr[p] + 1, R = arr[p + 1] - 1;
    }
    query(L, R);
  } else if (query(2046)) {
    long long L = 20468427, R;
    int n = 0;
    while (L < 204761410474LL) arr[n++] = L, L += 100020001;
    arr[n] = 204761410475LL;
    int p = query(arr, n);
    if (p) {
      L = arr[p - 1] + 1, R = arr[p] - 1;
      while (R - L + 1 > 10000) {
        int n = 10000;
        long long len = (R - L + 2) / (n + 1);
        long long cur = L - 1;
        for (int i = 0; i <= n; i++) arr[i] = cur, cur += len;
        arr[n + 1] = R + 1;
        int p = query(arr + 1, n);
        L = arr[p] + 1, R = arr[p + 1] - 1;
      }
      query(L, R);
    }
    L = 2046;
    n = 0;
    while (1) {
      if (L >= 20468427) break;
      arr[n++] = L;
      L += min(10000LL, L + 1) + 1;
    }
    p = query(arr + 1, n - 1);
    query(arr[p] + 1, arr[p + 1] - 1);
  } else if (query(6)) {
    long long a[10] = {6, 14, 30, 62, 126, 254, 510, 1022, 2046};
    int p = query(a + 1, 7);
    query(a[p] + 1, a[p + 1] - 1);
  } else if (query(2)) {
    query(3, 5);
  } else
    query(1);
  return 0;
}
