#include <bits/stdc++.h>
using namespace std;
vector<int> vt[21][2];
bool flag[21][2][1007];
int rec(int l, int r, int sig, int pos) {
  if (l == r) {
    vt[pos][sig].push_back(l);
    flag[pos][sig][l] = 1;
    return 0;
  }
  int mid = (l + r) / 2;
  for (int i = l; i <= r; i++) {
    vt[pos][sig].push_back(i);
    flag[pos][sig][i] = 1;
  }
  rec(l, mid, 0, pos + 1);
  rec(mid + 1, r, 1, pos + 1);
}
void printvt(vector<int> v) {
  for (int i = 0; i < (v.size()); i++) printf("%d ", v[i]);
  printf("\n");
}
int main() {
  int t, tst = 1;
  int n;
  scanf("%d", &n);
  rec(1, (n + 1) / 2, 0, 1);
  rec((n + 1) / 2 + 1, n, 1, 1);
  int ans[1007];
  for (int i = 1; i <= (n + 1); i++) ans[i] = 1000000007;
  int a;
  for (int i = 1; i <= (20); i++)
    for (int j = 0; j < (2); j++) {
      vector<int> &x = vt[i][j];
      if (x.size() == 0) continue;
      printf("%d\n", x.size());
      for (int k = 0; k < (x.size()); k++) printf("%d ", x[k]);
      printf("\n");
      fflush(stdout);
      for (int k = 1; k <= (n); k++) {
        scanf("%d", &a);
        if (flag[i][j][k] == 0) {
          ans[k] = min(ans[k], a);
        }
      }
    }
  printf("%d\n", -1);
  for (int i = 1; i <= (n); i++) printf("%d ", ans[i]);
  fflush(stdout);
  return 0;
}
