#include <bits/stdc++.h>
const bool debug = false;
using namespace std;
long long powmod(long long a, long long b, long long MOD) {
  long long res = 1;
  a %= MOD;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
  }
  return res;
}
void buginfo(const char* f, ...) {
  if (!debug) return;
  va_list al;
  va_start(al, f);
  vprintf(f, al);
  va_end(al);
}
const int maxn = 1100;
const int inf = 1e9 + 7;
int n, r[20][2][maxn], len, ans[maxn];
inline int check_bit(int x, int offset) { return ((1 << offset) & x) > 0; }
void query(int offset, int c) {
  vector<int> vc;
  for (int i = 0; i < n; ++i) {
    if (check_bit(i, offset) == c) vc.push_back(i);
  }
  if (vc.empty()) return;
  printf("%d\n", (int)vc.size());
  for (int i : vc) printf("%d ", i + 1);
  printf("\n");
  fflush(stdout);
  for (int i = 0; i < n; ++i) scanf("%d", &r[offset][c][i]);
}
int main() {
  scanf("%d", &n);
  fill(ans, ans + n, inf);
  for (int i = 0; i < 20; ++i)
    for (int j = 0; j < 2; ++j)
      for (int z = 0; z < n; ++z) r[i][j][z] = inf;
  int tmp = n;
  while (tmp > 0) {
    ++len;
    tmp = (tmp >> 1);
  }
  for (int i = 0; i < len; ++i)
    for (int j = 0; j < 2; ++j) query(i, j);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < len; ++j) {
      int c = check_bit(i, j);
      c = !c;
      ans[i] = min(ans[i], r[j][c][i]);
    }
  }
  printf("-1\n");
  for (int i = 0; i < n; ++i) printf("%d ", ans[i]);
  printf("\n");
  fflush(stdout);
  return 0;
}
