#include <bits/stdc++.h>
#pragma GCC target( \
    "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long double EPS = 1e-10;
const long double PI = acos(-1);
const int MOD7 = 1000000007;
const int MOD9 = 1000000009;
const int inf = 1e9;
vector<int> ans;
int n;
void ask(vector<int> kek) {
  if (!kek.size()) return;
  cout << kek.size() << endl;
  for (int i = 0; i < kek.size(); ++i) cout << kek[i] << ' ';
  ;
  cout << endl;
  vector<int> anses(n);
  for (long long i = 0; i < anses.size(); ++i) cin >> anses[i];
  ;
  for (int i = 0; i < n; ++i) {
    if (!binary_search((kek).begin(), (kek).end(), i + 1))
      ans[i] = min(ans[i], anses[i]);
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  srand(time(NULL));
  cin >> n;
  ans.resize(n, inf);
  for (int bt = 0; (1 << bt) <= n; ++bt) {
    vector<int> quer;
    vector<int> rquer;
    for (int i = 0; i < n; ++i) {
      if ((i / (1 << bt)) % 2)
        quer.push_back(i);
      else
        rquer.push_back(i);
    }
    for (int& i : quer) i++;
    for (int& i : rquer) i++;
    ask(quer);
    ask(rquer);
  }
  cout << -1 << endl;
  for (int i = 0; i < n; ++i) cout << ans[i] << ' ';
  cout << endl;
}
