#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
struct sw {
int nxt[2];
int flag = 0;
bool end = false;
};
vector<sw> switches;
int cnt = 0;
void walk(int cur, int trig) {
if (switches[cur].end) {
if (cnt == 1 && trig == -1) {
switches[cur].nxt[switches[cur].flag] = 0;
switches[cur].flag = 1-switches[cur].flag;
cnt--;
return;
}
switches[cur].nxt[switches[cur].flag] = trig;
switches[cur].flag = 1-switches[cur].flag;
cnt--;
return;
}
walk(switches[cur].nxt[switches[cur].flag], trig);
switches[cur].flag = 1-switches[cur].flag;
}
void create_circuit(int M, vector<int> A) {
int n = A.size();
int sz = n;
switches.resize(sz+1);
vector<bool> v(sz+1);
for (int i = 1; 2*i+1 <= sz; i++) {
switches[i].nxt[0] = 2*i;
switches[i].nxt[1] = 2*i+1;
v[switches[i].nxt[0]] = true;
v[switches[i].nxt[1]] = true;
}
for (int i = sz/2; i <= sz; i++) {
if (!v[i]) continue;
switches[i].end = true;
switches[i].nxt[0] = switches[i].nxt[1] = 0;
cnt += 2;
}
for (int i = 1; i < n; i++)
walk(1, A[i]);
while (cnt > 0) walk(1, -1);
vector<int> c(M+1, -1), x(sz), y(sz);
c[0] = A[0];
for (int i = 1; i <= sz; i++) {
if (!switches[i].end) {
x[i-1] = -switches[i].nxt[0];
y[i-1] = -switches[i].nxt[1];
}
else {
x[i-1] = switches[i].nxt[0];
y[i-1] = switches[i].nxt[1];
}
}
answer(c, x, y);
return;
}