#include <bits/stdc++.h>
const long long mod = 1000000007;
const long long Inf = 2 * 1e9;
using namespace std;
int toint(string s) {
  long long ans = 0;
  for (int(i) = 0; (i) < s.length(); (i)++) ans = ans * 10 + (s[i] - '0');
  return ans;
}
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
int n;
vector<int> ans;
int main() {
  cin >> n;
  ans.resize(n, Inf);
  int k = 1;
  while (k < n) {
    vector<int> q1, q2;
    vector<bool> used(n), used2(n);
    for (int i = 0; i < n; i += 2 * k) {
      for (int j = i; j < min(n, i + k); j++) {
        q1.push_back(j + 1);
        used[j] = true;
      }
    }
    printf("%d\n", q1.size());
    for (int(i) = 0; (i) < q1.size(); (i)++) {
      printf("%d ", q1[i]);
    }
    printf("\n");
    fflush(stdout);
    for (int(i) = 0; (i) < n; (i)++) {
      int tmp;
      scanf("%d", &tmp);
      if (!used[i]) ans[i] = min(ans[i], tmp);
    }
    for (int i = k; i < n; i += 2 * k) {
      for (int j = i; j < min(n, i + k); j++) {
        q2.push_back(j + 1);
        used2[j] = true;
      }
    }
    printf("%d\n", q2.size());
    for (int(i) = 0; (i) < q2.size(); (i)++) {
      printf("%d ", q2[i]);
    }
    printf("\n");
    fflush(stdout);
    for (int(i) = 0; (i) < n; (i)++) {
      int tmp;
      scanf("%d", &tmp);
      if (!used2[i]) ans[i] = min(ans[i], tmp);
    }
    k *= 2;
  }
  printf("-1\n");
  for (int(i) = 0; (i) < n; (i)++) printf("%d ", ans[i]);
  return 0;
}
