#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
vector<int> a[2][50];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < 10; i++) {
    vector<int> temp;
    for (int j = 1; j <= n; j++)
      if (j >> i & 1) temp.push_back(j);
    if (temp.size() == 0) {
      for (int j = 1; j <= n; j++) {
        a[1][i].push_back((int)1e9 + 10);
      }
    } else {
      printf("%d\n", temp.size());
      fflush(stdout);
      for (int j = 0; j < temp.size(); j++) {
        printf("%d ", temp[j]);
        fflush(stdout);
      }
      for (int j = 1; j <= n; j++) {
        int x;
        scanf("%d", &x);
        a[1][i].push_back(x);
      }
    }
    temp.clear();
    for (int j = 1; j <= n; j++)
      if (((j >> i) & 1) == 0) temp.push_back(j);
    printf("%d\n", temp.size());
    fflush(stdout);
    for (int j = 0; j < temp.size(); j++) {
      printf("%d ", temp[j]);
      fflush(stdout);
    }
    for (int j = 1; j <= n; j++) {
      int x;
      scanf("%d", &x);
      a[0][i].push_back(x);
    }
  }
  printf("-1\n");
  fflush(stdout);
  for (int i = 1; i <= n; i++) {
    int Min = 1e9 + 10;
    for (int j = 0; j < 10; j++)
      if (i >> j & 1)
        Min = min(Min, a[0][j][i - 1]);
      else
        Min = min(Min, a[1][j][i - 1]);
    printf("%d ", Min);
    fflush(stdout);
  }
  return 0;
}
