#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 1;
long long n, answer[30][10002], kol = 1, ans;
bool question[30][10002];
void make_question(long long m, long long g[10002], long long t) {
  for (long long i = 0; i < m; i++) {
    for (long long j = g[i]; j < g[i + 1]; j++) {
      if (i % 2 == 0) {
        question[t][j] = false;
        question[t + 1][j] = true;
      } else {
        question[t][j] = true;
        question[t + 1][j] = false;
      }
    }
  }
  long long g1[10002], r = 0;
  for (long long i = 0; i < m; i++) {
    if (g[i] + 1 != g[i + 1]) {
      g1[r] = g[i];
      r++;
      g1[r] = (g[i] + g[i + 1]) / 2;
      r++;
    } else {
      g1[r] = g[i];
      r++;
    }
  }
  g1[r] = n;
  if (m < n) {
    kol += 2;
    make_question(r, g1, t + 2);
  }
}
int main() {
  cin >> n;
  for (long long i = 0; i < n; i++) {
    question[0][i] = true;
  }
  long long z[10002];
  z[0] = 0;
  z[1] = n;
  make_question(1, z, 0);
  long long sum = 0;
  vector<long> quest;
  kol++;
  for (long long i = 2; i < kol; i++) {
    sum = 0;
    quest.clear();
    for (long long j = 0; j < n; j++) {
      if (question[i][j] == true) {
        sum++;
        quest.push_back(j + 1);
      }
    }
    cout << sum << endl;
    for (long long j = 0; j < quest.size(); j++) {
      cout << quest[j] << " ";
    }
    cout << endl;
    for (long long j = 0; j < n; j++) {
      cin >> answer[i][j];
    }
  }
  cout << "-1" << endl;
  for (long long i = 0; i < n; i++) {
    ans = INF;
    for (long long j = 2; j < kol; j++) {
      if (!question[j][i] && answer[j][i] < ans) {
        ans = answer[j][i];
      }
    }
    cout << ans << " ";
  }
  cout << endl;
}
