#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  int mi[n];
  for (int i = (0); i < (n); i++) mi[i] = 1e9;
  int t = 1;
  int z[1000];
  do {
    t *= 2;
    vector<int> v;
    int x = 0;
    while (x < n) {
      int f = 0;
      for (int i = (0); i < (t / 2); i++) {
        if (x + i < n)
          v.push_back(x + i);
        else
          break;
      }
      x += t;
    }
    cout << v.size() << "\n";
    ;
    set<int> temp;
    for (int i = (0); i < (v.size()); i++) {
      temp.insert(v[i]);
      cout << v[i] + 1 << " ";
    }
    cout << "\n";
    fflush(stdout);
    for (int i = (0); i < (n); i++) cin >> z[i];
    for (int i = (0); i < (n); i++) {
      if (temp.find(i) == temp.end()) mi[i] = min(mi[i], z[i]);
    }
    v.resize(0);
    x = 0;
    temp.clear();
    while (x < n) {
      int f = 0;
      for (int i = (0); i < (t / 2); i++) {
        if (x + i + t / 2 < n)
          v.push_back(x + i + t / 2);
        else
          break;
      }
      x += t;
    }
    cout << v.size() << "\n";
    ;
    for (int i = (0); i < (v.size()); i++) {
      temp.insert(v[i]);
      cout << v[i] + 1 << " ";
    }
    cout << "\n";
    fflush(stdout);
    for (int i = (0); i < (n); i++) cin >> z[i];
    for (int i = (0); i < (n); i++) {
      if (temp.find(i) == temp.end()) mi[i] = min(mi[i], z[i]);
    }
  } while (t < n);
  cout << "-1\n";
  fflush(stdout);
  for (int i = (0); i < (n); i++) cout << mi[i] << " ";
  cout << "\n";
  fflush(stdout);
}
