#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
using namespace std;
int a, b, c, d, n, m, k;
bool ques[22][1002];
int resp[22][1002], ans[1002];
int main() {
  scanf("%d", &n);
  int t = 1, c = 0;
  while (t < n) {
    t *= 2;
    ++c;
  }
  k = 0;
  for (int _n((c)-1), i(0); i <= _n; i++) {
    for (int _n((2) - 1), j(0); j <= _n; j++) {
      bool was = 0;
      vector<int> now;
      for (int _n((n)-1), z(0); z <= _n; z++) {
        if (((z >> i) & 1) == j) {
          now.push_back(z + 1);
          ques[k][z] = 1;
        }
      }
      if (!(int)((now).size())) continue;
      printf("%d\n", (int)((now).size()));
      for (int _n(((int)((now).size())) - 1), z(0); z <= _n; z++) {
        if (z) printf(" ");
        printf("%d", now[z]);
      }
      printf("\n");
      fflush(stdout);
      for (int _n((n)-1), j(0); j <= _n; j++) {
        scanf("%d", &resp[k][j]);
      }
      ++k;
    }
  }
  memset(ans, 63, sizeof(ans));
  for (int _n((n)-1), i(0); i <= _n; i++) {
    for (int _n((k)-1), j(0); j <= _n; j++) {
      if (ques[j][i]) continue;
      ans[i] = min(ans[i], resp[j][i]);
    }
  }
  printf("-1\n");
  for (int _n((n)-1), i(0); i <= _n; i++) {
    if (i) printf(" ");
    printf("%d", ans[i]);
  }
  printf("\n");
  fflush(stdout);
}
