#include <bits/stdc++.h>
using namespace std;
vector<int> v[11][2];
int in[1001][11][2], hl;
void go(int l, int e, int lv) {
  if (l == e) return;
  int mid = (l + e) / 2;
  for (int i = l; i <= mid; i++) v[lv][0].push_back(i);
  for (int i = mid + 1; i <= e; i++) v[lv][1].push_back(i);
  hl = max(hl, lv);
  go(l, mid, lv + 1);
  go(mid + 1, e, lv + 1);
}
int ans;
void go_q(int l, int e, int lv, int x) {
  if (l == e) return;
  int mid = (l + e) / 2;
  if (x <= mid) {
    ans = min(ans, in[x][lv][1]);
    go_q(l, mid, lv + 1, x);
  } else {
    ans = min(ans, in[x][lv][0]);
    go_q(mid + 1, e, lv + 1, x);
  }
  return;
}
int main() {
  int n;
  scanf("%d", &n);
  go(1, n, 0);
  for (int i = 0; i <= hl; i++)
    for (int j = 0; j < 2; j++) {
      int sz = v[i][j].size();
      printf("%d\n", sz);
      for (int k = 0; k < sz; k++) printf("%d ", v[i][j][k]);
      printf("\n");
      fflush(stdout);
      for (int k = 1; k <= n; k++) scanf("%d", &in[k][i][j]);
    }
  printf("-1\n");
  for (int i = 1; i <= n; i++) {
    ans = 2000000000;
    go_q(1, n, 0, i);
    printf("%d ", ans);
  }
}
