#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
void create_circuit(int m, vector<int> a) {
int n = a.size();
vector<int> c(m + 1), x, y, xl, yl, st;
int t = 1;
auto build = [&](const auto &build, int v, int sz) -> void {
x.push_back(-1);
y.push_back(-1);
xl.push_back(0);
yl.push_back(0);
st.push_back(0);
if (sz == 2) return;
x[v] = t++;
xl[v] = -(x[v] + 1);
build(build, x[v], sz >> 1);
y[v] = t++;
yl[v] = -(y[v] + 1);
build(build, y[v], sz >> 1);
};
vector<pair<int, int>> vv;
auto insert = [&](const auto &insert, int v) -> void {
if (st[v]) {
st[v] = 0;
if (y[v] != -1) {
insert(insert, y[v]);
} else {
vv.push_back({v, 1});
}
} else {
st[v] = 1;
if (x[v] != -1) {
insert(insert, x[v]);
} else {
vv.push_back({v, 0});
}
}
};
for (int i = 0; i <= m; i++) {
c[i] = -1;
}
n++;
a.push_back(0);
int l = 1;
while (l < n) {
l *= 2;
}
build(build, 0, l);
for (int j = 0; j < l; j++) {
insert(insert, 0);
}
for (int j = 0; j < l - n; j++) {
if (vv[j].second == 0) {
xl[vv[j].first] = -1;
} else {
yl[vv[j].first] = -1;
}
}
for (int j = l - n; j < l; j++) {
if (vv[j].second == 0) {
xl[vv[j].first] = a[j - l + n];
} else {
yl[vv[j].first] = a[j - l + n];
}
}
answer(c, xl, yl);
}