#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
long long Factorial(long long i) { return i > 1 ? i * Factorial(i - 1) : 1; }
long long Combination(long long n, long long r) {
  if (n - r < r) r = n - r;
  long long ansn = 1, ansr = 1;
  for (long long i = n - r + 1; i <= n; ++i) ansn *= i;
  for (long long j = 1; j <= r; ++j) ansr *= j;
  return ansn / ansr;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
std::vector<int> Eratosthenes(const int len, int *vis) {
  memset(vis, 0, sizeof(int) * len);
  std::vector<int> prime;
  int m = (int)sqrt(len + 0.5);
  for (int i = (2); i <= (m); ++i)
    if (!vis[i])
      for (int j = i * i; j < len; j += i) vis[j] = 1;
  for (int i = (2); i < (len); ++i)
    if (!vis[i]) prime.push_back(i);
  return prime;
}
void phi_table(int n, int *phi) {
  for (int i = (2); i <= (n); ++i) phi[i] = 0;
  phi[1] = 1;
  for (int i = (2); i <= (n); ++i)
    if (!phi[i])
      for (int j = i; j <= n; j += i) {
        if (!phi[j]) phi[j] = j;
        phi[j] = phi[j] / i * (i - 1);
      }
}
const int maxn = 1005;
const int INF = 1e9;
int ans[maxn], in[maxn], n;
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n); ++i) ans[i] = INF;
  int len = -1;
  for (int i = (0); i < (20); ++i)
    if ((n >> i) & 1) len = i;
  if (n == 2) len = 0;
  for (int i = (0); i <= (len); ++i) {
    std::vector<int> out1, out2;
    for (int j = (1); j <= (n); ++j) {
      if ((j >> i) & 1)
        out1.push_back(j);
      else
        out2.push_back(j);
    }
    cout << out1.size() << '\n';
    for (int j = (0); j < (out1.size()); ++j)
      printf("%d%c", out1[j], j == out1.size() - 1 ? '\n' : ' ');
    fflush(stdout);
    for (int j = (1); j <= (n); ++j) scanf("%d", in + j);
    for (int j = (0); j < (out2.size()); ++j)
      ans[out2[j]] = std::min(ans[out2[j]], in[out2[j]]);
    cout << out2.size() << '\n';
    for (int j = (0); j < (out2.size()); ++j)
      printf("%d%c", out2[j], j == out2.size() - 1 ? '\n' : ' ');
    fflush(stdout);
    for (int j = (1); j <= (n); ++j) scanf("%d", in + j);
    for (int j = (0); j < (out1.size()); ++j)
      ans[out1[j]] = std::min(ans[out1[j]], in[out1[j]]);
  }
  cout << "-1\n";
  for (int i = (1); i <= (n); ++i) printf("%d%c", ans[i], i == n ? '\n' : ' ');
  fflush(stdout);
  return 0;
}
