#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
void add_element(string x);
void compile_set();
bool check_element(string x);
namespace SUBTASK_12
{
vector<int> solve(int n, int w, int r)
{
vector<int> ans(n, 0);
string s = "";
for (int _ = 1; _ <= n; _++)
s += '0';
for (int i = 0; i < n; i++)
{
s[i] = '1';
add_element(s);
}
compile_set();
s = "";
for (int _ = 1; _ <= n; _++)
s += '0';
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (s[j] == '1')
continue;
s[j] = '1';
if (check_element(s))
{
ans[j] = i;
break;
}
s[j] = '0';
}
}
return ans;
}
bool check_sub(int n, int w, int r)
{
return 0;
return w >= n && r >= n * n;
}
};
namespace SUBTASK_3
{
vector<int> ans;
void gen(int n, int l, int r)
{
if (l == r)
return ;
int m = l + r >> 1;
string s = "";
for (int i = 0; i < n; i++)
if (i < l || i > r)
s += '1';
else
s += '0';
for (int i = l; i <= m; i++)
{
s[i] = '1';
add_element(s);
s[i] = '0';
}
gen(n, l, m);
gen(n, m + 1, r);
};
void decode(int n, int l, int r, vector<int> A)
{
if (l == r)
return ans[A.back()] = l, void();
int m = l + r >> 1;
string s = "";
for (int _ = 1; _ <= n; _++)
s += '1';
for (int x : A)
s[x] = '0';
vector<int> L, R;
for (int x : A)
{
s[x] = '1';
if (check_element(s))
L.push_back(x);
else
R.push_back(x);
s[x] = '0';
}
decode(n, l, m, L);
decode(n, m + 1, r, R);
}
vector<int> solve(int n, int w, int r)
{
vector<int> A;
for (int i = 0; i < n; i++)
A.push_back(i);
ans.assign(n, 0);
gen(n, 0, n - 1);
compile_set();
decode(n, 0, n - 1, A);
return ans;
}
};
vector<int> restore_permutation(int N, int W, int R)
{
if (SUBTASK_12::check_sub(N, W, R))
return SUBTASK_12::solve(N, W, R);
return SUBTASK_3::solve(N, W, R);
}