#include using namespace std; void solve(const vector& positions, const vector& values, vector& perm, int n) { int m = positions.size(); if (m <= 1) { if (m == 1) { perm[positions[0]] = values[0]; } return; } int m1 = m / 2; vector pos1(positions.begin(), positions.begin() + m1); vector pos2(positions.begin() + m1, positions.end()); vector xs(m); for (int idx = 0; idx < m; idx++) { int k = values[idx]; vector Q(n + 1, 0); for (int i = 1; i <= n; i++) { if (perm[i] != 0) { Q[i] = perm[i]; } else { Q[i] = i; } } for (int p : pos1) { Q[p] = k; } cout << 0; for (int i = 1; i <= n; i++) { cout << " " << Q[i]; } cout << endl; cout.flush(); int resp; cin >> resp; xs[idx] = resp; } int maxx = 0; for (int r : xs) { maxx = max(maxx, r); } vector w1; for (int idx = 0; idx < m; idx++) { if (xs[idx] == maxx) { w1.push_back(values[idx]); } } set w1s(w1.begin(), w1.end()); vector w2; for (int v : values) { if (w1s.find(v) == w1s.end()) { w2.push_back(v); } } solve(pos1, w1, perm, n); solve(pos2, w2, perm, n); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector perm(n + 1, 0); vector allp(n), allv(n); for (int i = 0; i < n; i++) { allp[i] = i + 1; allv[i] = i + 1; } solve(allp, allv, perm, n); cout << 1; for (int i = 1; i <= n; i++) { cout << " " << perm[i]; } cout << endl; cout.flush(); return 0; }