#include <bits/stdc++.h>
using namespace std;
bool occurs(vector<int> &v, int n) {
  for (auto x : v)
    if (x == n) return true;
  return false;
}
vector<vector<int>> query(int n) {
  if (n == 2) {
    vector<vector<int>> r;
    vector<int> f;
    vector<int> s;
    f.push_back(1);
    s.push_back(2);
    r.push_back(f);
    r.push_back(s);
    return r;
  }
  vector<vector<int>> prev = query(ceil(float(n) / 2));
  int f = ceil(float(n) / 2);
  for (int i = 0; i < prev.size(); ++i) {
    int s = prev[i].size();
    for (int j = 0; j < s; ++j) {
      int x = prev[i][j];
      if (x + f <= n) prev[i].push_back(x + f);
    }
  }
  vector<int> v1;
  vector<int> v2;
  for (long long i = 1; i <= f; i++) v1.push_back(i);
  for (long long i = f + 1; i <= n; i++) v2.push_back(i);
  prev.push_back(v1);
  prev.push_back(v2);
  return prev;
}
int main() {
  int n;
  cin >> n;
  vector<vector<int>> q = query(n);
  vector<int> min(n + 1, 1000000000);
  for (auto v : q) {
    cout << v.size() << endl;
    fflush(stdout);
    for (auto x : v) cout << x << " ";
    cout << endl;
    fflush(stdout);
    int c;
    for (long long i = 1; i <= n; i++) {
      cin >> c;
      if (!occurs(v, i))
        if (c < min[i]) min[i] = c;
    }
  }
  cout << -1 << endl;
  fflush(stdout);
  for (long long i = 1; i <= n; i++) cout << min[i] << " ";
  fflush(stdout);
  return 0;
}
