#include "messy.h"
#include <vector>
#include <cstdio>
#include <string>
#include <set>
#include <cstdlib>
#include <iostream>
using namespace std;
void add_element(string x);
bool check_element(string x);
void compile_set();
int rasp[155];
void dnc(int st,int dr,int n)
{
if(st==dr)
{
return;
}
string s;
for(int i=0;i<n;i++)
{
s.push_back('1');
}
for(int i=st;i<=dr;i++)
{
s[i]='0';
}
int mij=(st+dr)/2;
for(int i=st;i<=mij;i++)
{
s[i]='1';
add_element(s);
s[i]='0';
}
dnc(st,mij,n);
dnc(mij+1,dr,n);
}
void dnc2(int st,int dr,int n,vector<int>can)
{
if(st==dr)
{
rasp[st]=can[0];
return;
}
string s;
for(int i=0;i<n;i++)
{
s.push_back('1');
}
for(int i=0;i<can.size();i++)
{
s[can[i]]='0';
}
vector<int>canst,candr;
int mij=(st+dr)/2;
for(int i=0;i<can.size();i++)
{
s[can[i]]='1';
if(check_element(s)==1)
{
canst.push_back(can[i]);
}
else
{
candr.push_back(can[i]);
}
s[can[i]]='0';
}
dnc2(st,mij,n,canst);
dnc2(mij+1,dr,n,candr);
}
std::vector<int> restore_permutation(int n, int w, int r) {
dnc(0,n-1,n);
vector<int>cans;
for(int i=0;i<n;i++)
{
cans.push_back(i);
}
compile_set();
dnc2(0,n-1,n,cans);
vector<int>rez;
for(int i=0;i<n;i++)
{
rez.push_back(rasp[rasp[i]]);
}
return rez;
}