#include <bits/stdc++.h>
const int N = (int)1e3 + 228;
const int INF = (int)1e9 + 228;
using namespace std;
int n, ans[N];
bool used[N];
vector<int> cur, nxt;
void ask(vector<int> v) {
  if (v.empty()) return;
  for (int i = 1; i <= n; i++) used[i] = false;
  cout << (int)v.size() << endl;
  for (int i = 0; i < (int)v.size(); i++) {
    cout << v[i] << ' ';
    used[v[i]] = true;
  }
  cout << endl;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    if (!used[i]) ans[i] = min(ans[i], x);
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) ans[i] = INF;
  cur.push_back(n);
  vector<int> ups, downs;
  while (!cur.empty()) {
    int pos = 1;
    for (auto sz : cur) {
      if (sz == 1) {
        pos++;
        continue;
      }
      int mid = sz / 2;
      for (int i = mid + 1; i <= sz; i++) ups.push_back(pos + i - 1);
      for (int i = 1; i <= mid; i++) downs.push_back(pos + i - 1);
      nxt.push_back(mid);
      nxt.push_back(sz - mid);
      pos += sz;
    }
    ask(ups), ask(downs);
    cur = nxt;
    nxt.clear(), ups.clear(), downs.clear();
  }
  cout << -1 << endl;
  for (int i = 1; i <= n; i++) cout << ans[i] << ' ';
  return 0;
}
