#include <bits/stdc++.h>
using namespace std;
bool in(long double &v) { return scanf("%Lf", &v) != EOF; }
bool in(long long &v) { return scanf("%lld", &v) != EOF; }
bool in(int &v) { return scanf("%d", &v) != EOF; }
bool in(char *v) { return scanf("%s", v) != EOF; }
bool in(char &v) { return scanf("%c", &v) != EOF; }
bool in(unsigned &v) { return scanf("%u", &v) != EOF; }
bool in(string &v) { return (bool)(cin >> v); }
template <typename T, typename... Args>
bool in(T &v, Args &...args) {
  bool ret = in(v);
  return ret && in(args...);
}
void out(long double v) { printf("%Lf", v); }
void out(long long v) { printf("%lld", v); }
void out(int v) { printf("%d", v); }
void out(char v) { printf("%c", v); }
void out(unsigned v) { printf("%u", v); }
void out(string v) { printf("%s", v.c_str()); }
void out(const char *v) { printf("%s", v); }
template <typename T>
void out(vector<T> &v) {
  for (int i = 0; i < (int)v.size(); i++) out(v[i]);
}
template <typename T, typename... Args>
void out(T v, Args... args) {
  out(v);
  out(args...);
}
const int N = 1e3 + 10;
long long ans[N];
int n;
vector<long long> ask(vector<int> &qu) {
  printf("%d\n", (int)qu.size());
  for (auto it : qu) {
    printf("%d ", it);
  }
  puts("");
  fflush(stdout);
  vector<long long> ret;
  for (int i = 0; i < n; i++) {
    int t;
    in(t);
    ret.push_back(t);
  }
  return ret;
}
int main() {
  in(n);
  for (int i = 0; i < N; i++) ans[i] = 1e15;
  for (int i = 1; i <= n; i *= 2) {
    vector<int> a, b;
    for (int k = 1; k <= n; k++) {
      if (k & i)
        a.push_back(k);
      else
        b.push_back(k);
    }
    auto aa = ask(a);
    auto ab = ask(b);
    for (int k = 1; k <= n; k++) {
      if (k & i)
        ans[k] = min(ans[k], ab[k - 1]);
      else
        ans[k] = min(ans[k], aa[k - 1]);
    }
  }
  puts("-1");
  for (int i = 1; i <= n; i++) printf("%lld%c", ans[i], " \n"[i == n]);
  fflush(stdout);
  return 0;
}
