#include <bits/stdc++.h>
using namespace std;
void inp() {}
template <typename T, typename... Args>
void inp(T& n, Args&... args) {
  int ch = getchar(), sign = 1;
  n = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  n = n * sign;
  inp(args...);
}
inline long long int bitLen(long long int n) {
  long long int bl = 0;
  while (n) bl += 1, n /= 2;
  return bl;
}
int main() {
  long long int i, j, k, n;
  cin >> n;
  k = bitLen(n - 1);
  vector<vector<long long int> > q(2 * k);
  vector<vector<long long int> > a(2 * k, vector<long long int>(n));
  for (i = 0; i < n; i++) {
    for (j = 0; j < k; j++) {
      if (i & 1LL << j) {
        q[2 * j + 1].push_back(i);
      } else
        q[2 * j].push_back(i);
    }
  }
  for (i = 0; i < q.size(); i++) {
    assert(q[i].size());
    cout << q[i].size() << '\n';
    for (j = 0; j < q[i].size(); j++)
      cout << q[i][j] + 1 << " \n"[j + 1 == q[i].size()];
    fflush(stdout);
    for (j = 0; j < n; j++) cin >> a[i][j];
  }
  cout << -1 << '\n';
  for (i = 0; i < n; i++) {
    long long int ans = 1000000010;
    for (j = 0; j < k; j++) {
      if (i & 1LL << j) {
        ans = min(ans, a[2 * j][i]);
      } else
        ans = min(ans, a[2 * j + 1][i]);
    }
    cout << ans << " \n"[i + 1 == n];
  }
  fflush(stdout);
  return 0;
}
