#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e3 + 5;
const int mod = (int)1e9 + 7;
inline bool B(int a, int b) { return (a & (1 << b)) > 0; }
int n, ans[N], cn, a[N];
vector<int> z[20];
inline void solve() {
  scanf("%d", &n);
  memset(ans, 63, sizeof ans);
  for (int i = 0; i < (1 << 13); i++) {
    if (__builtin_popcount(i) == 6) {
      cn++;
      if (cn <= n) {
        for (int j = 0; j < 13; j++) {
          if (B(i, j)) {
            z[j].emplace_back(cn);
          }
        }
      }
    }
  }
  for (int i = 0; i < 13; i++) {
    if (z[i].size() > 0) {
      printf("%d\n", z[i].size());
      for (auto j : z[i]) {
        printf("%d ", j);
      }
      puts("");
      fflush(stdout);
      for (int j = 1; j <= n; j++) {
        scanf("%d", &a[j]);
        if (!binary_search(z[i].begin(), z[i].end(), j)) {
          ans[j] = min(ans[j], a[j]);
        }
      }
    }
  }
  puts("-1");
  for (int i = 1; i <= n; i++) {
    printf("%d%c", ans[i], " \n"[i == n]);
  }
}
int tests = 1;
int main() {
  while (tests--) {
    solve();
  }
  return 0;
}
