#include <bits/stdc++.h>
using namespace std;
const int MAX = 1010;
int n;
int a[MAX], c[MAX];
void init() { cin >> n; }
void process() {
  memset(a, 63, sizeof(a));
  vector<pair<int, int> > ques;
  ques.push_back(make_pair(1, n));
  while (!ques.empty()) {
    vector<pair<int, int> > newQues;
    for (int i = 0; i < ques.size(); i++) {
      if (ques[i].first != ques[i].second) {
        int l = ques[i].first, r = ques[i].second, mid = (l + r) / 2;
        newQues.push_back(make_pair(l, mid));
        newQues.push_back(make_pair(mid + 1, r));
      }
    }
    vector<int> b;
    for (int i = 0; i < newQues.size(); i += 2) {
      for (int j = newQues[i].first; j <= newQues[i].second; j++)
        b.push_back(j);
    }
    if (b.size() > 0) {
      cout << b.size() << '\n';
      for (int i = 0; i < b.size(); i++) cout << b[i] << " ";
      cout << '\n';
      fflush(stdout);
      for (int i = 1; i <= n; i++) cin >> c[i];
      for (int i = 1; i <= n; i++) {
        bool check = true;
        for (int j = 0; j < b.size(); j++) {
          if (b[j] == i) {
            check = false;
            break;
          }
        }
        if (check) a[i] = min(a[i], c[i]);
      }
    }
    b.resize(0);
    for (int i = 1; i < newQues.size(); i += 2) {
      for (int j = newQues[i].first; j <= newQues[i].second; j++)
        b.push_back(j);
    }
    if (b.size() > 0) {
      cout << b.size() << '\n';
      for (int i = 0; i < b.size(); i++) cout << b[i] << " ";
      cout << '\n';
      fflush(stdout);
      for (int i = 1; i <= n; i++) cin >> c[i];
      for (int i = 1; i <= n; i++) {
        bool check = true;
        for (int j = 0; j < b.size(); j++) {
          if (b[j] == i) {
            check = false;
            break;
          }
        }
        if (check) a[i] = min(a[i], c[i]);
      }
    }
    ques = newQues;
  }
  cout << -1 << '\n';
  for (int i = 1; i <= n; i++) cout << a[i] << " ";
  cout << '\n';
  fflush(stdout);
}
int main() {
  ios_base::sync_with_stdio(false);
  init();
  process();
}
