#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000")
using namespace std;
void solve(bool);
void precalc();
clock_t start;
int testNumber = 1;
bool todo = true;
bool stress = false;
int main() {
  start = clock();
  int t = 1;
  cout.sync_with_stdio(0);
  cin.tie(0);
  precalc();
  cout.precision(10);
  cout << fixed;
  int testNum = 1;
  while (t--) {
    solve(true);
    ++testNumber;
  }
  return 0;
}
template <typename T>
T binpow(T q, T w, T mod) {
  if (!w) return 1 % mod;
  if (w & 1) return q * 1LL * binpow(q, w - 1, mod) % mod;
  return binpow(q * 1LL * q % mod, w / 2, mod);
}
void precalc() {}
template <typename T>
T gcd(T q, T w) {
  while (w) {
    q %= w;
    swap(q, w);
  }
  return q;
}
template <typename T>
T lcm(T q, T w) {
  return q / gcd(q, w) * w;
}
vector<vector<int>> matrix;
const int INF = 2e9;
int n;
vector<int> get_our(int l, int r) {
  vector<int> result(n, INF);
  for (int i = l; i < r; ++i) {
    for (int j = 0; j < n; ++j) {
      result[j] = min(result[j], matrix[j][i]);
    }
  }
  return result;
}
vector<int> get_result() {
  vector<int> res(n);
  for (int i = 0; i < n; ++i) {
    cin >> res[i];
  }
  return res;
}
int cnt = 0;
vector<int> get_query(const vector<int>& cur) {
  ++cnt;
  cout << cur.size() << endl;
  for (int x : cur) {
    cout << x + 1 << " ";
  }
  cout << endl;
  return get_result();
}
const int L = 10;
void solve(bool read) {
  cin >> n;
  vector<vector<int>> questions(L * 2);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < L; ++j) {
      if (i & (1 << j)) {
        questions[2 * j].push_back(i);
      } else {
        questions[2 * j + 1].push_back(i);
      }
    }
  }
  vector<vector<int>> ans(L * 2, vector<int>(n, INF));
  for (int i = 0; i < L * 2; ++i) {
    if (!questions[i].empty()) {
      ans[i] = get_query(questions[i]);
    }
  }
  cout << -1 << endl;
  for (int i = 0; i < n; ++i) {
    int res = INF;
    for (int j = 0; j < L; ++j) {
      if (i & (1 << j)) {
        res = min(res, ans[2 * j + 1][i]);
      } else {
        res = min(res, ans[2 * j][i]);
      }
    }
    cout << res << " ";
  }
  cout << endl;
}
