#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
void sync_stdio() {
  cin.tie(NULL);
  ios_base::sync_with_stdio(false);
}
struct Sync_stdio {
  Sync_stdio() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
  }
} _sync_stdio;
struct FAIL {
  FAIL() {
    cout << "CHANGE!!!"
         << "\n";
  }
};
int n;
vector<int> ask(const vector<int> &v) {
  if (v.empty()) {
    return vector<int>(n, INT_MAX);
  }
  cout << v.size() << "\n";
  for (auto i : v) {
    cout << i + 1 << " ";
  }
  cout << "\n";
  cout.flush();
  vector<int> ans(n);
  for (int i = (0); i < (n); ++i) {
    cin >> ans[i];
  }
  return ans;
}
vector<int> ans[10][2];
vector<int> gen(int bit, int j, int n) {
  vector<int> query;
  for (int i = (0); i < (n); ++i) {
    if (!!(i & (1 << bit)) == j) {
      query.push_back(i);
    }
  }
  return query;
}
int main() {
  cin >> n;
  for (int i = (0); i < (10); ++i) {
    for (int j = (0); j < (2); ++j) {
      ans[i][j] = ask(gen(i, j, n));
    }
  }
  cout << -1 << "\n";
  for (int i = (0); i < (n); ++i) {
    int minc = INT_MAX;
    for (int j = (0); j < (10); ++j) {
      if (i & (1 << j)) {
        minc = min(minc, ans[j][0][i]);
      } else {
        minc = min(minc, ans[j][1][i]);
      }
    }
    cout << minc << " ";
  }
  cout << "\n";
  cout.flush();
  return 0;
}
