#include <bits/stdc++.h>
using namespace std;
const int N = 1000007, inf = 0x3f3f3f3f;
int f[2][1007][1007];
int n;
void ask(vector<int> ind, int len, int side) {
  if (side) {
    for (int& x : ind) {
      x = n - 1 - x;
    }
  }
  cout << ind.size() << '\n';
  for (int x : ind) {
    cout << x + 1 << ' ';
  }
  cout << endl;
  for (int i = 0; i < n; ++i) {
    cin >> f[side][len][i];
  }
}
int least(int x) {
  while (__builtin_popcount(x) > 1) {
    x -= x & -x;
  }
  return x;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int side = 0; side < 2; ++side) {
    int len = 1;
    while (len < n) {
      vector<int> ind;
      for (int i = 0; i < n; i += 2 * len) {
        for (int j = 0; j < len and i + j < n; ++j) {
          ind.push_back(i + j);
        }
      }
      ask(ind, len, side);
      len <<= 1;
    }
  }
  cout << -1 << endl;
  for (int i = 0; i < n; ++i) {
    int row = i;
    int ans = 0x3f3f3f3f;
    while (row) {
      int len = least(row);
      ans = min(ans, f[0][len][i]);
      row -= len;
    }
    row = n - 1 - i;
    while (row) {
      int len = least(row);
      ans = min(ans, f[1][len][i]);
      row -= len;
    }
    cout << ans << ' ';
  }
  cout << endl;
}
