#include <bits/stdc++.h>
using namespace std;
const long long R = 10004205361450474ll;
long long K[10000 + 5], f[10][10000 + 5], pos = 1;
long long DP(int t, long long L) {
  if (!t) return L;
  if (L > 10000) return min(R, DP(t, 10000) - 10000 + L);
  if (f[t][L]) return f[t][L];
  f[t][L] = L;
  for (int i = 1; i <= L; i++) f[t][L] = DP(t - 1, f[t][L]) + 1;
  f[t][L] = DP(t - 1, f[t][L]);
  return f[t][L];
}
int main() {
  for (int v = 5; v >= 1; v--) {
    int k = min(pos, 10000ll);
    long long R = pos;
    printf("%d ", k);
    K[0] = pos - 1;
    for (int i = 1; i <= k; i++) {
      pos = DP(v - 1, R), R = pos + 1, printf("%I64d ", pos), fflush(stdout);
      K[i] = pos;
    }
    printf("\n"), fflush(stdout);
    int now;
    scanf("%d", &now);
    if (now < 0) return 0;
    pos = K[now] + 1;
  }
  return 0;
}
