#include <bits/stdc++.h>
using namespace std;
int wyn[1024];
int odp[1024];
int n;
int pyt;
vector<pair<int, int> > v[2];
void pytaj(vector<int>& skad, vector<int>& gdzie) {
  if (skad.size() == 0) return;
  printf("%d\n", int(skad.size()));
  for (int i = 0; i < skad.size(); i++) printf("%d ", skad[i] + 1);
  printf("\n");
  fflush(stdout);
  for (int i = 0; i < n; i++) scanf("%d", &odp[i]);
  pyt++;
  for (int q = 0; q < gdzie.size(); q++) {
    int i = gdzie[q];
    wyn[i] = min(wyn[i], odp[i]);
  }
}
int main() {
  pyt = 0;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) wyn[i] = 1000000010;
  v[0].push_back(make_pair(0, n - 1));
  int akt = 0;
  while (!v[akt].empty()) {
    v[1 - akt].clear();
    vector<int> pyt1, pyt2;
    for (int k = 0; k < v[akt].size(); k++) {
      int a = v[akt][k].first;
      int b = v[akt][k].second;
      int sr = (a + b) / 2;
      for (int q = a; q <= sr; q++) pyt1.push_back(q);
      for (int q = sr + 1; q <= b; q++) pyt2.push_back(q);
      if (sr > a) v[1 - akt].push_back(make_pair(a, sr));
      if (b > sr + 1) v[1 - akt].push_back(make_pair(sr + 1, b));
    }
    pytaj(pyt1, pyt2);
    pytaj(pyt2, pyt1);
    akt = 1 - akt;
  }
  printf("-1\n");
  for (int i = 0; i < n; i++) printf("%d ", wyn[i]);
  printf("\n");
  fflush(stdout);
}
