#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1050;
int n, L[MAXN];
void fin() {
  printf("0\n");
  fflush(stdout);
}
void ask(vector<int> &V) {
  printf("%d ", ((int)V.size()));
  for (int i = (0); i < (int)(((int)V.size())); i++) {
    if (i) printf(" ");
    printf("%d", V[i] + 1);
    L[V[i]] = 1;
  }
  puts("");
  fflush(stdout);
  int k;
  scanf("%d", &k);
  k--;
  for (int i = (0); i < (int)(((int)V.size())); i++) L[(k + i) % n] = 0;
}
int main() {
  scanf("%d", &n);
  if (n < 4) fin();
  int aim = n / 2 - 1;
  int k = -1, mx = 0;
  for (int i = (2); i < (int)(n + 1); i++) {
    int aps = n - ((n + i - 1) / i) - (i - 1);
    if (aps > mx) {
      mx = aps;
      k = i;
    }
  }
  int tot = 0;
  while (tot < mx) {
    vector<int> A;
    for (int i = (0); i < (int)(n); i++)
      if (i % k) {
        if (!L[i]) A.push_back(i);
        if (((int)A.size()) == k) break;
      }
    ask(A);
    tot = 0;
    for (int i = (0); i < (int)(n); i++)
      if (L[i]) tot++;
  }
  fin();
  return 0;
}
