#include <bits/stdc++.h>
using namespace std;
const int N = 1005, INF = 1e9 + 5;
int n, x;
int ans[N] = {};
vector<int> arr;
vector<vector<int>> p;
vector<vector<int>> p_n;
void query(int ft) {
  vector<int> ask;
  set<int> s;
  for (size_t i = ft; i < p_n.size(); i += 2) {
    for (auto j : p_n[i]) {
      ask.push_back(j);
      s.insert(j);
    }
  }
  cout << (int)ask.size() << endl;
  for (auto i : ask) {
    cout << i << " ";
  }
  cout << endl;
  for (int i = 1; i <= n; i++) {
    cin >> x;
    if (s.find(i) == s.end()) ans[i] = min(ans[i], x);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    ans[i] = INF;
    arr.push_back(i);
  }
  p.push_back(arr);
  while (true) {
    for (auto vec : p) {
      vector<int> a;
      vector<int> b;
      for (size_t j = 0; j < vec.size(); j++) {
        if (j < (int)vec.size() / 2)
          a.push_back(vec[j]);
        else
          b.push_back(vec[j]);
      }
      if (!a.empty()) p_n.push_back(a);
      if (!b.empty()) p_n.push_back(b);
    }
    query(0);
    query(1);
    bool f = false;
    for (auto i : p_n) {
      if ((int)i.size() != 1) f = true;
    }
    if (!f) break;
    p = p_n;
    p_n.clear();
  }
  cout << -1 << endl;
  for (int i = 1; i <= n; i++) {
    cout << ans[i] << " ";
  }
  cout << endl;
  return 0;
}
