#include <bits/stdc++.h>
#include "messy.h"
using namespace std;
vector<string>v;
int ans[257];
void getall(string str,int l,int r){
if(l==r) return;
int m=(l+r)/2;
for(int i=m+1;i<=r;i++) str[i-1]='0',str[i]='1',v.push_back(str),add_element(str);
str[r]='0';
for(int i=l;i<=m;i++) str[i]='1';
getall(str,m+1,r);
for(int i=l;i<=m;i++) str[i]='0';
for(int i=m+1;i<=r;i++) str[i]='1';
getall(str,l,m);
}
void cheq(string str,int l,int r,set<int>se){
// cout<<l<<' '<<r<<" | ";
// for(auto it=se.begin();it!=se.end();it++) cout<<*it<<' ';
// cout<<"\n";
set<int>rs;
if(l==r) {
ans[l]=*se.begin();
return ;
}
int m=(l+r)/2;
for(auto it=se.begin();it!=se.end();it++){
str[*it]='1';
if(check_element(str)){
rs.insert(*it);
}
str[*it]='0';
}
for(auto it=rs.begin();it!=rs.end();it++){
se.erase(*it);
str[*it]='1';
}
cheq(str,l,m,se);
for(auto it=rs.begin();it!=rs.end();it++){
str[*it]='0';
}
for(auto it=se.begin();it!=se.end();it++){
str[*it]='1';
}
cheq(str,m+1,r,rs);
}
vector<int> restore_permutation(int n, int w, int r) {
string bum="";
for(int i=0;i<n;i++) bum+='0';
getall(bum,0,n-1);
// for(int i=0;i<v.size();i++){
// cout<<v[i]<<"\n";
// }
compile_set();
set<int> temp;
for(int i=0;i<n;i++) temp.insert(i);
// for(in)
cheq(bum,0,n-1,temp);
vector<int>aa;
int aans[257];
for(int i=0;i<n;i++) aans[ans[i]]=i;
for(int i=0;i<n;i++) aa.push_back(aans[i]);
return aa;
}