#include <bits/stdc++.h>
using namespace std;
int n;
int best[1001];
vector<int> ask[20];
bool vis[1001];
void buildtree(int l, int h, int num) {
  if (num > 10) return;
  int mid = (l + h) / 2;
  for (int i = l; i <= mid; i++) ask[2 * num].push_back(i);
  for (int i = mid + 1; i <= h; i++) {
    ask[2 * num + 1].push_back(i);
  }
  if (l == h) return;
  buildtree(l, mid, num + 1);
  buildtree(mid + 1, h, num + 1);
}
int main() {
  for (int i = 0; i <= 1000; i++) best[i] = 1000000001;
  cin >> n;
  buildtree(1, n, 0);
  for (int i = 0; i < 20; i++) {
    memset(vis, false, sizeof(vis));
    if (ask[i].size() == 0) break;
    cout << ask[i].size() << endl;
    for (int j = 0; j < ask[i].size() - 1; j++) {
      cout << ask[i][j] << " ";
      vis[ask[i][j]] = true;
    }
    cout << ask[i][ask[i].size() - 1] << endl;
    vis[ask[i][ask[i].size() - 1]] = true;
    int ans;
    for (int k = 1; k <= n; k++) {
      scanf("%d", &ans);
      if (!vis[k]) best[k] = min(best[k], ans);
    }
  }
  cout << -1 << endl;
  for (int i = 1; i < n; i++) cout << best[i] << " ";
  cout << best[n] << endl;
  return 0;
}
