#include <bits/stdc++.h>
int n;
void ask(int p, bool s, int* r) {
  int group_size = (1 << p);
  std::vector<int> q;
  for (int i = (s ? 1 : 0); group_size * i < n; i += 2) {
    for (int j = 0; j < group_size; j++) {
      if (group_size * i + j < n) {
        q.push_back(group_size * i + j);
      }
    }
  }
  printf("%d\n", (int)q.size());
  for (auto v : q) {
    printf("%d ", 1 + v);
  }
  printf("\n");
  fflush(stdout);
  for (int i = 0; i < n; i++) {
    scanf(" %d", &r[i]);
  }
}
void answer(int* m) {
  puts("-1");
  for (int i = 0; i < n; i++) printf("%d\n", m[i]);
  fflush(stdout);
}
int main(void) {
  scanf("%d", &n);
  int m[1200];
  for (int i = 0; i < n; i++) m[i] = 1000 * 1000 * 1000 + 10;
  int l;
  for (l = 0; (1 << l) < n; l++)
    ;
  for (int i = 0; i < l; i++) {
    int r1[1200], r2[1200];
    ask(i, false, r1);
    ask(i, true, r2);
    for (int j = 0; j < n; j++) {
      if ((j / (1 << i)) % 2 == 1) {
        m[j] = std::min(m[j], r1[j]);
      } else {
        m[j] = std::min(m[j], r2[j]);
      }
    }
  }
  answer(m);
  return 0;
}
