#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
const int INF = 0x3f3f3f3f;
int a[N], n;
bool vis[N];
void print(vector<int> &p) {
  printf("%d\n", (int)p.size());
  for (int i = 0; i < p.size(); i++) {
    printf("%d%c", p[i], i == p.size() - 1 ? '\n' : ' ');
  }
  fflush(stdout);
}
void update(vector<int> &p) {
  print(p);
  memset(vis, 0, sizeof vis);
  for (int i = 0; i < p.size(); i++) {
    vis[p[i]] = true;
  }
  int x;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &x);
    if (!vis[i]) a[i] = min(a[i], x);
  }
}
int main() {
  scanf("%d", &n);
  memset(a, INF, sizeof a);
  vector<pair<int, int> > v;
  v.push_back({1, n});
  while (true) {
    vector<pair<int, int> > vv;
    vector<int> p, p2;
    for (auto x : v) {
      if (x.second == x.first) continue;
      int mid = (x.first + x.second) / 2;
      vv.push_back({x.first, mid});
      vv.push_back({mid + 1, x.second});
      for (int i = x.first; i <= mid; i++) {
        p.push_back(i);
      }
      for (int i = mid + 1; i <= x.second; i++) {
        p2.push_back(i);
      }
    }
    if (vv.size() == 0) break;
    update(p);
    update(p2);
    v = vv;
  }
  printf("-1\n");
  fflush(stdout);
  for (int i = 1; i <= n; i++) {
    printf("%d%c", a[i], i == n ? '\n' : ' ');
  }
  fflush(stdout);
  return 0;
}
