#include <bits/stdc++.h>
using lint = long long int;
using pii = std::pair<int, int>;
using std::vector;
int N;
vector<pii> query_ind[30];
int ans[1010];
void query(int ind) {
  if (ind > 20) {
    return;
  }
  if (query_ind[ind].size() == 0) {
    query(ind + 1);
    return;
  }
  vector<int> temp;
  bool check[1010];
  for (int i = 1; i <= N; i++) {
    check[i] = false;
  }
  for (int i = 0; i < query_ind[ind].size(); i++) {
    int st = query_ind[ind][i].first;
    int fi = query_ind[ind][i].second;
    for (int j = st; j <= fi; j++) {
      temp.push_back(j);
      check[j] = true;
    }
    if (st != fi) {
      if (ind % 2 == 1) {
        query_ind[ind + 2].push_back(pii(st, (st + fi) / 2));
        query_ind[ind + 3].push_back(pii((st + fi) / 2 + 1, fi));
      } else {
        query_ind[ind + 1].push_back(pii(st, (st + fi) / 2));
        query_ind[ind + 2].push_back(pii((st + fi) / 2 + 1, fi));
      }
    }
  }
  printf("%d\n", temp.size());
  for (int i = 0; i < temp.size(); i++) {
    printf("%d ", temp[i]);
  }
  printf("\n");
  fflush(stdout);
  for (int i = 1; i <= N; i++) {
    int tt;
    scanf("%d", &tt);
    if (!check[i]) {
      ans[i] = std::min(ans[i], tt);
    }
  }
  query(ind + 1);
}
int main(void) {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    ans[i] = 2000000000;
  }
  query_ind[1].push_back(pii(1, N / 2));
  query_ind[2].push_back(pii(N / 2 + 1, N));
  query(1);
  printf("-1\n");
  for (int i = 1; i <= N; i++) {
    printf("%d ", ans[i]);
  }
  fflush(stdout);
  return 0;
}
