#include <bits/stdc++.h>
using namespace std;
int cache[1005][20][2];
int ret[1005];
int n;
vector<int> ans(1005, INT_MAX);
void query(vector<int> &arr) {
  if (!arr.empty()) {
    printf("%lu\n", arr.size());
    for (auto &x : arr) printf("%i ", x);
    printf("\n");
    fflush(stdout);
    for (int x = 1; x <= n; x++) scanf("%i", &ret[x]);
  } else
    memset(ret, 0, sizeof ret);
}
int main() {
  scanf("%i", &n);
  for (int x = 2, y = 1; x < 2 * n; x *= 2, y++) {
    vector<int> w;
    for (int z = 1; z <= n; z += x)
      for (int a = 0; a < x / 2 && z + a <= n; a++) w.push_back(z + a);
    query(w);
    for (int z = 1; z <= n; z++) cache[z][y][0] = ret[z];
    w.clear();
    for (int z = 1 + x / 2; z <= n; z += x)
      for (int a = 0; a < x / 2 && z + a <= n; a++) w.push_back(z + a);
    query(w);
    for (int z = 1; z <= n; z++) cache[z][y][1] = ret[z];
  }
  printf("-1\n");
  for (int z = 1; z <= n; z++) {
    for (int x = 2, y = 1; x < 2 * n; x *= 2, y++) {
      for (int a = 0; a <= 1; a++)
        if (((z - 1) >> (y - 1) & 1) != a) ans[z] = min(ans[z], cache[z][y][a]);
    }
    printf("%i ", ans[z]);
  }
  printf("\n");
  fflush(stdout);
}
