#include <bits/stdc++.h>
using namespace std;
const int N = 1000 + 10;
int val[N];
int n;
int res[N];
bool update[N];
void calc(vector<pair<int, int> > seg) {
  bool stop = false;
  while (!stop) {
    vector<pair<int, int> > newseg;
    vector<int> f, s;
    if (seg.size() == n) stop = true;
    for (int i = 0; i < seg.size(); ++i) {
      if (i % 2 == 0) {
        for (int j = seg[i].first; j <= seg[i].second; ++j) update[j] = true;
      } else {
        for (int j = seg[i].first; j <= seg[i].second; ++j) update[j] = false;
      }
      newseg.push_back(
          make_pair(seg[i].first, (seg[i].first + seg[i].second) / 2));
      if (seg[i].first != seg[i].second)
        newseg.push_back(
            make_pair((seg[i].first + seg[i].second) / 2 + 1, seg[i].second));
    }
    for (int i = 0; i < n; ++i)
      if (update[i])
        s.push_back(i);
      else
        f.push_back(i);
    printf("%d\n", f.size());
    for (int i = 0; i < f.size(); ++i)
      printf("%d%c", f[i] + 1, i + 1 == f.size() ? '\n' : ' ');
    fflush(stdout);
    for (int x, i = 0; i < n; ++i) {
      scanf("%d", &x);
      if (update[i]) val[i] = min(val[i], x);
    }
    printf("%d\n", s.size());
    for (int i = 0; i < s.size(); ++i)
      printf("%d%c", s[i] + 1, i + 1 == s.size() ? '\n' : ' ');
    fflush(stdout);
    for (int x, i = 0; i < n; ++i) {
      scanf("%d", &x);
      if (!update[i]) val[i] = min(val[i], x);
    }
    seg.swap(newseg);
  }
}
int main(int argc, char *argv[]) {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) val[i] = 1e9;
  vector<pair<int, int> > seg;
  seg.push_back(make_pair(0, (n - 1) / 2));
  seg.push_back(make_pair((n - 1) / 2 + 1, n - 1));
  calc(seg);
  puts("-1");
  for (int i = 0; i < n; ++i) printf("%d%c", val[i], i + 1 == n ? '\n' : ' ');
  fflush(stdout);
  return 0;
}
