#include <bits/stdc++.h>
using namespace std;
template <typename T>
istream &operator>>(istream &__ins_, vector<T> &__v_) {
  for (T &__dst_ : __v_) __ins_ >> __dst_;
  return __ins_;
}
template <typename F, typename S>
istream &operator>>(istream &__ins_, pair<F, S> &__p_) {
  return __ins_ >> __p_.first >> __p_.second;
}
void in() {}
template <typename T, typename... Args>
void in(T &__dst_, Args &...__args_) {
  cin >> __dst_;
  in(__args_...);
}
template <typename F, typename S>
ostream &operator<<(ostream &__outs_, pair<F, S> const &__p_) {
  return __outs_ << "(" << __p_.first << ", " << __p_.second << ")";
}
template <typename T>
ostream &operator<<(ostream &__outs_, vector<T> const &__v_) {
  for (size_t i = 0; i < __v_.size(); ++i) {
    if (i > 0) __outs_ << " ";
    __outs_ << __v_[i];
  }
  return __outs_;
}
void out(char const *, ostream &) {}
template <typename T, typename... Args>
void out(char const *__prefix_, ostream &__outs_, T const &__src_,
         Args const &...__args_) {
  out(__prefix_, __outs_ << __prefix_ << __src_, __args_...);
}
template <typename T, typename... Args>
void out(T const &__src_, Args const &...__args_) {
  out(" ", cout << __src_, __args_...);
}
void outln() { cout << endl; }
template <typename... Args>
void outln(Args const &...__args_) {
  out(__args_...);
  out("\n");
}
int const mod = 1e9 + 7;
int const inf = (int)1e9;
long long const infl = (long long)2e18;
void solve();
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  solve();
  return 0;
}
int const N = 1010;
int ans[N];
int n;
void req(vector<pair<int, int> > const &segs, int p) {
  vector<int> idx;
  for (size_t i = p; i < segs.size(); i += 2) {
    for (int w = segs[i].first; w < segs[i].second; ++w) {
      idx.push_back(w);
    }
  }
  if (!idx.empty()) {
    outln(idx.size());
    for (int const w : idx) {
      out(w + 1, "");
    }
    outln();
    set<int> used(begin(idx), end(idx));
    for (int i = 0; i < n; ++i) {
      int x;
      in(x);
      if (used.count(i) == 0) {
        ans[i] = min(ans[i], x);
      }
    }
  }
}
void solve() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    ans[i] = inf;
  }
  vector<pair<int, int> > segs;
  segs.emplace_back(0, n);
  for (int i = 0; i < 10; ++i) {
    vector<pair<int, int> > segs2;
    for (pair<int, int> seg : segs) {
      segs2.emplace_back(seg.first, (seg.first + seg.second) / 2);
      segs2.emplace_back((seg.first + seg.second) / 2, seg.second);
    }
    segs.swap(segs2);
    req(segs, 0);
    req(segs, 1);
  }
  outln(-1);
  for (int i = 0; i < n; ++i) {
    out(ans[i], "");
  }
  outln();
}
