#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 5;
const int INF = 2e9;
int mn[MAXN];
set<vector<int> > was;
void ask(vector<int> v) {
  printf("%d\n", (int)v.size());
  for (int i = 0; i < (int)v.size(); i++) {
    printf("%d ", v[i] + 1);
  }
  printf("\n");
  fflush(stdout);
}
vector<int> cur[2];
void solve() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    mn[i] = INF;
  }
  int ans;
  for (int i = 9; i >= 0; i--) {
    cur[0].clear();
    cur[1].clear();
    for (int k = 0; k < n; k++) {
      int bt = ((k & (1 << i)) != 0) ? 1 : 0;
      cur[bt].push_back(k);
    }
    for (int j = 0; j < 2; j++) {
      if ((int)cur[j].size() == n || (int)cur[j].empty()) continue;
      if (was.find(cur[j]) != was.end()) continue;
      ask(cur[j]);
      was.insert(cur[j]);
      for (int k = 0; k < n; k++) {
        scanf("%d", &ans);
        int bt = ((k & (1 << i)) != 0) ? 1 : 0;
        if (bt != j) {
          mn[k] = min(mn[k], ans);
        }
      }
    }
  }
  printf("-1\n");
  for (int i = 0; i < n; i++) {
    printf("%d ", mn[i]);
  }
  printf("\n");
  fflush(stdout);
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
