#include <bits/stdc++.h>
using namespace std;
const int64_t INF = 1e18;
int main() {
  int64_t n;
  cin >> n;
  int64_t blen = 1 << 9;
  vector<vector<int64_t>> a(10, vector<int64_t>(n, INF)),
      b(10, vector<int64_t>(n, INF));
  for (int64_t i = 0; i < 10; ++i) {
    if (blen < n) {
      vector<int64_t> q;
      for (int64_t j = blen; j < n; j += 2 * blen) {
        for (int64_t k = 0; k < blen && j + k < n; ++k) {
          q.push_back(j + k + 1);
        }
      }
      cout << q.size() << '\n';
      for (auto qq : q) cout << qq << ' ';
      cout << endl;
      for (int64_t l = 0; l < n; ++l) {
        cin >> a[i][l];
      }
    }
    vector<int64_t> q;
    for (int64_t j = 0; j < n; j += 2 * blen) {
      for (int64_t k = 0; k < blen && j + k < n; ++k) {
        q.push_back(j + k + 1);
      }
    }
    cout << q.size() << '\n';
    for (auto qq : q) cout << qq << ' ';
    cout << endl;
    for (int64_t l = 0; l < n; ++l) {
      cin >> b[i][l];
    }
    blen /= 2;
  }
  vector<int64_t> ans(n, INF);
  blen = 1 << 9;
  for (int64_t i = 0; i < 10; ++i) {
    for (int64_t j = 0; j < n; j += 2 * blen) {
      for (int64_t k = 0; k < blen && j + k < n; ++k) {
        ans[j + k] = min(ans[j + k], a[i][j + k]);
      }
    }
    for (int64_t j = blen; j < n; j += 2 * blen) {
      for (int64_t k = 0; k < blen && j + k < n; ++k) {
        ans[j + k] = min(ans[j + k], b[i][j + k]);
      }
    }
    blen /= 2;
  }
  cout << "-1\n";
  for (int64_t i = 0; i < n; ++i) {
    cout << ans[i] << ' ';
  }
  cout << endl;
  return 0;
}
