#include <bits/stdc++.h>
using namespace std;
vector<int> f[30];
int n, cnt, tmp;
int ans[1010], hh[1010];
bool vis[1010];
void dfs(int l, int r, int de) {
  if (l == r) return;
  int mid = (l + r) >> 1;
  for (int i = l; i <= mid; i++) f[de * 2 - 1].push_back(i);
  dfs(l, mid, de + 1);
  for (int i = mid + 1; i <= r; i++) f[de * 2].push_back(i);
  dfs(mid + 1, r, de + 1);
  cnt = max(cnt, de * 2);
}
int main() {
  scanf("%d", &n);
  dfs(1, n, 1);
  memset(ans, 0x3f, sizeof(ans));
  for (int i = 1; i <= cnt; i++) {
    tmp = f[i].size();
    printf("%d\n", tmp);
    for (int j = 0; j < tmp; j++)
      printf("%d%c", f[i][j], " \n"[j == (tmp - 1)]);
    fflush(stdout);
    for (int j = 1; j <= n; j++) scanf("%d", &hh[j]);
    memset(vis, 0, sizeof(vis));
    for (int j = 0; j < tmp; j++) vis[f[i][j]] = 1;
    for (int j = 1; j <= n; j++)
      if (!vis[j]) ans[j] = min(ans[j], hh[j]);
  }
  printf("-1\n");
  for (int i = 1; i <= n; i++) printf("%d%c", ans[i], " \n"[i == n]);
  return 0;
}
