#include <bits/stdc++.h>
using namespace std;
int ret[2000], ans[2000], drq1[2000], drq2[2000], drq[2000];
int n, a, m;
vector<int> req1;
vector<int> req2;
void get() {
  for (int i = 1; i <= m; i++) {
    cin >> a;
    if (drq[i] == 0) ans[i] = min(a, ans[i]);
  }
}
void make() {
  int x = n;
  int prev = 0;
  while (x != 0) {
    req1.clear();
    req2.clear();
    for (int i = 1; i <= n; i++) drq[i] = drq1[i] = drq2[i] = 0;
    for (int j = 0; j < n; j += x + prev) {
      for (int i = 1; i <= x / 2; i++)
        if (i + j <= m) {
          req1.push_back(j + i);
          drq1[j + i] = 1;
        }
      if (prev && x + prev + j <= n) {
        req1.push_back(x + prev + j);
        req2.push_back(x + prev + j);
      }
      for (int i = x / 2 + 1 + x % 2; i <= x; i++)
        if (i + j <= m) {
          req2.push_back(j + i);
          drq2[j + i] = 1;
        }
    }
    if (req1.size() > 0) {
      cout << req1.size() << endl;
      for (int i = 0; i < req1.size(); i++) cout << req1[i] << " ";
      cout << flush;
      for (int i = 1; i <= n; i++) drq[i] = drq1[i];
      get();
    }
    if (req2.size() > 0) {
      cout << req2.size() << endl;
      for (int i = 0; i < req2.size(); i++) cout << req2[i] << " ";
      cout << flush;
      for (int i = 1; i <= n; i++) drq[i] = drq2[i];
      get();
    }
    prev = x % 2;
    x /= 2;
  }
}
int main() {
  cin >> m;
  n = 1;
  while (n < m) n *= 2;
  for (int i = 1; i <= 1500; i++) ans[i] = 1000000001;
  make();
  cout << -1 << endl;
  for (int i = 1; i <= m; i++) cout << ans[i] << " ";
  cout << flush;
  return 0;
}
