#include <bits/stdc++.h>
#include "messy.h"
using namespace std;
vector<int> restore_permutation(int n, int w, int r) {
(void)w;
(void)r;
vector<int> result(n, -1);
function<void(int,int)> build = [&](int l, int rr) {
if (rr - l == 1) return;
int mid = (l + rr) / 2;
string s(n, '1');
for (int i = l; i < rr; ++i) s[i] = '0';
for (int i = l; i < mid; ++i) {
s[i] = '1';
add_element(s);
s[i] = '0';
}
build(l, mid);
build(mid, rr);
};
function<void(int,int,const vector<int>&)> solve = [&](int l, int rr, const vector<int>& T) {
if (rr - l == 1) {
result[T[0]] = l;
return;
}
int mid = (l + rr) / 2;
vector<int> TL, TR;
string q(n, '1');
for (int pos : T) q[pos] = '0';
for (int pos : T) {
q[pos] = '1';
if (check_element(q)) TL.push_back(pos);
else TR.push_back(pos);
q[pos] = '0';
}
solve(l, mid, TL);
solve(mid, rr, TR);
};
build(0, n);
compile_set();
vector<int> all(n);
iota(all.begin(), all.end(), 0);
solve(0, n, all);
return result;
}