#include <bits/stdc++.h>
using namespace std;
const long long N = (long long)(5e5) + 322;
const long long INF = (long long)(1e9);
const long long mod = (long long)(1e9) + 7;
const double eps = 1e-9;
vector<int> v[1111], rev[1111];
int lvl, n, mn[1111], mx, a[1111];
void Do(int l = 1, int r = n, int lvl = 1) {
  if (r - l < 1) {
    return;
  }
  mx = max(mx, lvl);
  int mid = (l + r) >> 1;
  for (long long i = l; i <= r; ++i) {
    if (mid >= i)
      v[lvl].push_back(i);
    else
      rev[lvl].push_back(i);
  }
  Do(l, mid, lvl + 1);
  Do(mid + 1, r, lvl + 1);
}
int main() {
  cin >> n;
  for (long long i = 1; i <= n; ++i) mn[i] = mod;
  Do();
  for (long long lvl = 1; lvl <= mx; ++lvl) {
    cout << (int)(v[lvl].size()) << "\n";
    for (auto it : v[lvl]) {
      cout << it << ' ';
      fflush(stdout);
    }
    for (long long i = 1; i <= n; ++i) cin >> a[i];
    for (auto it : rev[lvl]) {
      mn[it] = min(mn[it], a[it]);
    }
    cout << (int)(rev[lvl].size()) << "\n";
    for (auto it : rev[lvl]) {
      cout << it << ' ';
      fflush(stdout);
    }
    for (long long i = 1; i <= n; ++i) cin >> a[i];
    for (auto it : v[lvl]) {
      mn[it] = min(mn[it], a[it]);
    }
  }
  cout << -1 << "\n";
  fflush(stdout);
  for (long long i = 1; i <= n; ++i) {
    cout << mn[i] << ' ';
    fflush(stdout);
  }
  return 0;
}
