#include <bits/stdc++.h>
using namespace std;
using lli = long long int;
using pii = tuple<lli, lli>;
using piii = tuple<lli, lli, lli>;
using vi = vector<lli>;
using vii = vector<pii>;
using viii = vector<piii>;
using vvi = vector<vi>;
using vvii = vector<vii>;
using vviii = vector<viii>;
using vb = vector<bool>;
using vvb = vector<vb>;
template <class A, class B>
ostream& operator<<(ostream& s, tuple<A, B> const& a) {
  return s << "(" << get<0>(a) << "," << get<1>(a) << ")";
}
template <class T>
ostream& print_collection(ostream& s, T const& a) {
  for (auto it = begin(a); it != end(a); ++it) {
    s << *it;
    if (next(it) != end(a)) s << " ";
  }
  return s;
}
template <class T>
ostream& operator<<(ostream& s, vector<T> const& a) {
  return print_collection(s, a);
}
template <class T>
ostream& operator<<(ostream& s, set<T> const& a) {
  return print_collection(s, a);
}
const lli INF = 1000 * 1000 * 1000 + 42;
int main() {
  lli n;
  scanf("%lld", &n);
  lli size = 1;
  vvi mini0;
  vvi mini1;
  while (size < n) {
    vi w;
    for (lli i = size; i < n; i += 2 * size) {
      for (lli j = 0; j < (lli)(size); ++j) {
        if (i + j < n) {
          w.push_back(i + j);
        }
      }
    }
    printf("%lld\n", (lli)w.size());
    for (lli i = 0; i < (lli)(w.size()); ++i) {
      printf("%lld%c", w[i] + 1, " \n"[i == w.size() - 1]);
    }
    fflush(stdout);
    mini0.push_back(vi(n));
    for (lli i = 0; i < (lli)(n); ++i) {
      scanf("%lld", &mini0.back()[i]);
    }
    w.clear();
    for (lli i = 0; i < n; i += 2 * size) {
      for (lli j = 0; j < (lli)(size); ++j) {
        if (i + j < n) {
          w.push_back(i + j);
        }
      }
    }
    printf("%lld\n", (lli)w.size());
    for (lli i = 0; i < (lli)(w.size()); ++i) {
      printf("%lld%c", w[i] + 1, " \n"[i == w.size() - 1]);
    }
    fflush(stdout);
    mini1.push_back(vi(n));
    for (lli i = 0; i < (lli)(n); ++i) {
      scanf("%lld", &mini1.back()[i]);
    }
    size *= 2;
  }
  vi res(n, INF);
  for (lli i = 0; i < (lli)(mini0.size()); ++i) {
    for (lli j = 0; j < (lli)(n); ++j) {
      if ((j >> i) & 1) {
        res[j] = min(res[j], mini1[i][j]);
      } else {
        res[j] = min(res[j], mini0[i][j]);
      }
    }
  }
  printf("-1\n");
  for (lli i = 0; i < (lli)(n); ++i) {
    printf("%lld%c", res[i], " \n"[i == n - 1]);
  }
  fflush(stdout);
  return 0;
}
