#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  scanf("%d", &n);
  vector<int> mins(n + 1, INT_MAX);
  vector<pair<int, int>> ranges;
  ranges.push_back(make_pair(1, n));
  vector<int> questions[3];
  bool was[n + 1];
  while (true) {
    questions[0] = questions[2];
    questions[1].clear();
    questions[2].clear();
    vector<pair<int, int>> newranges;
    for (auto range : ranges) {
      if (range.second - range.first + 1 == 2) {
        questions[0].push_back(range.first);
        questions[1].push_back(range.second);
      } else if (range.second - range.first + 1 == 3) {
        questions[0].push_back(range.first);
        questions[1].push_back(range.first + 1);
        questions[2].push_back(range.second);
      } else {
        int mid = (range.first + range.second) / 2;
        for (int i = range.first; i <= mid; ++i) {
          questions[0].push_back(i);
        }
        for (int i = mid + 1; i <= range.second; ++i) {
          questions[1].push_back(i);
        }
        newranges.push_back(make_pair(range.first, mid));
        newranges.push_back(make_pair(mid + 1, range.second));
      }
    }
    ranges = newranges;
    bool asked = false;
    for (int i = 0; i < 2; ++i) {
      if (questions[i].size() > 0) {
        asked = true;
        memset(was, 0, sizeof(was));
        printf("%zu\n", questions[i].size());
        fflush(stdout);
        for (int col : questions[i]) {
          printf("%d ", col);
          was[col] = true;
        }
        printf("\n");
        fflush(stdout);
        for (int i = 1; i <= n; ++i) {
          int m;
          scanf("%d", &m);
          if (!was[i]) {
            mins[i] = min(mins[i], m);
          }
        }
      }
    }
    if (!asked) {
      break;
    }
  }
  printf("-1\n");
  fflush(stdout);
  for (int i = 1; i <= n; ++i) {
    printf("%d ", mins[i]);
  }
  printf("\n");
  fflush(stdout);
  return 0;
}
