#include using namespace std; int n; vector do_query(const vector& ops) { int L = ops.size(); cout << L; for (int x : ops) { cout << " " << x; } cout << endl; cout.flush(); vector res(L); for (int &r : res) { cin >> r; } return res; } vector get_neighbors(int center, const vector& tests, bool already_lit) { vector ops; int num = tests.size(); if (!already_lit) { ops.push_back(center); } vector after_add_indices(num); for (int i = 0; i < num; ++i) { int global_idx = ops.size(); ops.push_back(tests[i]); after_add_indices[i] = global_idx; ops.push_back(tests[i]); } vector responses = do_query(ops); vector neigh; for (int i = 0; i < num; ++i) { int resp = responses[after_add_indices[i]]; if (resp == 1) { neigh.push_back(tests[i]); } } return neigh; } int main() { int subtask; cin >> subtask >> n; vector all_tests; for (int i = 1; i <= n; ++i) { if (i != 1) all_tests.push_back(i); } vector adj1 = get_neighbors(1, all_tests, false); int small = min(adj1[0], adj1[1]); int large = max(adj1[0], adj1[1]); vector trans_ops = {small, 1}; do_query(trans_ops); vector perm = {1, small}; set usedd = {1, small}; vector remaining; for (int i = 1; i <= n; ++i) { if (usedd.find(i) == usedd.end()) { remaining.push_back(i); } } vector pos(n + 1, -1); for (int i = 0; i < remaining.size(); ++i) { pos[remaining[i]] = i; } int current = small; while (!remaining.empty()) { vector adj = get_neighbors(current, remaining, true); int next_one = adj[0]; int idx = pos[next_one]; int last = remaining.back(); remaining[idx] = last; pos[last] = idx; remaining.pop_back(); pos[next_one] = -1; perm.push_back(next_one); usedd.insert(next_one); current = next_one; } cout << -1; for (int p : perm) { cout << " " << p; } cout << endl; cout.flush(); return 0; }