File size: 2,065 Bytes
1fd0050
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <bits/stdc++.h>
using namespace std;

int n;

vector<int> do_query(const vector<int>& ops) {
  int L = ops.size();
  cout << L;
  for (int x : ops) {
    cout << " " << x;
  }
  cout << endl;
  cout.flush();
  vector<int> res(L);
  for (int &r : res) {
    cin >> r;
  }
  return res;
}

vector<int> get_neighbors(int center, const vector<int>& tests, bool already_lit) {
  vector<int> ops;
  int num = tests.size();
  if (!already_lit) {
    ops.push_back(center);
  }
  vector<int> 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<int> responses = do_query(ops);
  vector<int> 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<int> all_tests;
  for (int i = 1; i <= n; ++i) {
    if (i != 1) all_tests.push_back(i);
  }
  vector<int> adj1 = get_neighbors(1, all_tests, false);
  int small = min(adj1[0], adj1[1]);
  int large = max(adj1[0], adj1[1]);
  vector<int> trans_ops = {small, 1};
  do_query(trans_ops);
  vector<int> perm = {1, small};
  set<int> usedd = {1, small};
  vector<int> remaining;
  for (int i = 1; i <= n; ++i) {
    if (usedd.find(i) == usedd.end()) {
      remaining.push_back(i);
    }
  }
  vector<int> pos(n + 1, -1);
  for (int i = 0; i < remaining.size(); ++i) {
    pos[remaining[i]] = i;
  }
  int current = small;
  while (!remaining.empty()) {
    vector<int> 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;
}