#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 7;
int n, p;
int mn[N];
vector<int> q;
void ask() {
  printf("%d\n", (int)q.size());
  for (auto x : q) printf("%d ", x);
  printf("\n");
  fflush(stdout);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) mn[i] = 1e9 + 7;
  p = 32 - __builtin_clz(n);
  p = (1 << p);
  if (p == 2 * n) p /= 2;
  int cnt = 2;
  for (int i = p / 2; i; i /= 2) {
    q.clear();
    for (int j = 0; j < cnt; j++) {
      for (int k = 0; k < i; k++)
        if ((j % 2 == 0) && j * i + k + 1 <= n) q.push_back(j * i + k + 1);
    }
    ask();
    int l = 0;
    for (int j = 1; j <= n; j++) {
      int a;
      scanf("%d", &a);
      if (l < (int)q.size() && q[l] == j) {
        l++;
        continue;
      }
      mn[j] = min(mn[j], a);
    }
    cnt *= 2;
  }
  cnt = 2;
  for (int i = p / 2; i; i /= 2) {
    q.clear();
    for (int j = 0; j < cnt; j++) {
      for (int k = 0; k < i; k++)
        if ((j % 2 == 1) && j * i + k + 1 <= n) q.push_back(j * i + k + 1);
    }
    ask();
    int l = 0;
    for (int j = 1; j <= n; j++) {
      int a;
      scanf("%d", &a);
      if (l < (int)q.size() && q[l] == j) {
        l++;
        continue;
      }
      mn[j] = min(mn[j], a);
    }
    cnt *= 2;
  }
  puts("-1");
  for (int i = 1; i <= n; i++) printf("%d ", mn[i]);
  puts("");
  fflush(stdout);
  return 0;
}
