#include <bits/stdc++.h>
using namespace std;
vector<int> ask[22];
int q;
void dfs(int l, int r, int d) {
  if (l == r) {
    q = max(q, d);
    return;
  }
  int mid = (l + r) / 2;
  for (int i = l; i <= mid; ++i) {
    ask[d].push_back(i);
  }
  for (int i = mid + 1; i <= r; ++i) {
    ask[d + 1].push_back(i);
  }
  dfs(l, mid, d + 2);
  dfs(mid + 1, r, d + 2);
}
int mp[1010][1010];
bool vis[1010];
int main() {
  int n;
  scanf("%d", &n);
  dfs(1, n, 0);
  memset(mp, (0x3f), sizeof mp);
  for (int i = 1; i <= (n); ++i) mp[i][i] = 0;
  for (int i = 0; i < (q); ++i) {
    int sz = ask[i].size();
    if (sz == 0) continue;
    printf("%d\n", sz);
    memset(vis, (0), sizeof vis);
    for (int j = 0; j < (sz); ++j) {
      if (j == sz - 1)
        printf("%d\n", ask[i][j]);
      else
        printf("%d ", ask[i][j]);
      vis[ask[i][j]] = 1;
    }
    fflush(stdout);
    for (int j = 1; j <= (n); ++j) {
      int x;
      scanf("%d", &x);
      if (vis[j]) continue;
      for (int k = 0; k < (sz); ++k) {
        int y = ask[i][k];
        mp[j][y] = x;
      }
    }
  }
  puts("-1");
  for (int i = 1; i <= (n); ++i) {
    int mi = 0x3f3f3f3f;
    for (int j = 1; j <= (n); ++j)
      if (i != j) mi = min(mi, mp[i][j]);
    if (i == n)
      printf("%d\n", mi);
    else
      printf("%d ", mi);
  }
  fflush(stdout);
  return 0;
}
