#include <bits/stdc++.h>   using namespace std;   int cache[1005][20][2];   int ret[1005];   int n;   vector<int> ans(1005, INT_MAX);   void query(vector<int> &arr) {     if (!arr.empty()) {       printf( %lu n , arr.size());       for (auto &x : arr) printf( %i  , x);       printf(  n );       fflush(stdout);       for (int x = 1; x <= n; x++) scanf( %i , &ret[x]);     } else       memset(ret, 0, sizeof ret);   }   int main() {     scanf( %i , &n);     for (int x = 2, y = 1; x < 2 * n; x *= 2, y++) {       vector<int> w;       for (int z = 1; z <= n; z += x)         for (int a = 0; a < x / 2 && z + a <= n; a++) w.push_back(z + a);       query(w);       for (int z = 1; z <= n; z++) cache[z][y][0] = ret[z];       w.clear();       for (int z = 1 + x / 2; z <= n; z += x)         for (int a = 0; a < x / 2 && z + a <= n; a++) w.push_back(z + a);       query(w);       for (int z = 1; z <= n; z++) cache[z][y][1] = ret[z];     }     printf( -1 n );     for (int z = 1; z <= n; z++) {       for (int x = 2, y = 1; x < 2 * n; x *= 2, y++) {         for (int a = 0; a <= 1; a++)           if (((z - 1) >> (y - 1) & 1) != a) ans[z] = min(ans[z], cache[z][y][a]);       }       printf( %i  , ans[z]);     }     printf(  n );     fflush(stdout);   }   