#include <bits/stdc++.h>
using namespace std;
const int N = 1E3 + 10;
vector<pair<int, int>> vec[2][N];
int n;
int val[N], cnt[2][N];
bool vis[N];
void solve(int l, int r, int depth) {
  if (l == r) return;
  vec[0][depth + 1].push_back(make_pair(l, (l + r) / 2));
  cnt[0][depth + 1] += (l + r) / 2 - l + 1;
  solve(l, (l + r) / 2, depth + 1);
  vec[1][depth + 1].push_back(make_pair((l + r) / 2 + 1, r));
  cnt[1][depth + 1] += r - (r + l) / 2;
  solve((l + r) / 2 + 1, r, depth + 1);
}
int main() {
  scanf("%d", &n);
  memset(val, 0x3f, sizeof val);
  solve(1, n, 0);
  for (int type = 0; type < 2; type++) {
    for (int i = 1; i <= n; i++) {
      int v = (int)vec[type][i].size();
      if (v > 0) {
        memset(vis, 0, sizeof vis);
        printf("%d\n", cnt[type][i]);
        for (int j = 0; j < v; j++) {
          for (int k = vec[type][i][j].first; k <= vec[type][i][j].second;
               k++) {
            printf("%d ", k);
            vis[k] = true;
          }
        }
        fflush(stdout);
        for (int j = 1; j <= n; j++) {
          int t;
          scanf("%d", &t);
          if (vis[j]) continue;
          val[j] = min(val[j], t);
        }
      }
    }
  }
  printf("-1\n");
  for (int i = 1; i <= n; i++) {
    printf("%d\n", val[i]);
  }
  printf("\n");
  return 0;
}
