#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
void create_circuit(int M, vector<int> A) {
int N = A.size();
int K = 16;
vector<int> C(M + 1);
C[0] = A[0]; // Start: Origin -> Trigger 1
C[1] = -1; // Trigger 1 -> Root Switch
int num_switches = K - 1;
vector<int> X(num_switches), Y(num_switches);
// 1. Build the tree structure
for (int i = 1; i < K / 2; i++) {
X[i-1] = -(2 * i);
Y[i-1] = -(2 * i + 1);
}
// 2. Dry Run to find leaf visit order
vector<int> state(num_switches, 0);
vector<int*> leaf_slots;
for (int i = 0; i < K; i++) {
int curr = 1;
while (true) {
int sw_idx = curr - 1;
if (state[sw_idx] == 0) {
state[sw_idx] = 1;
if (curr >= K / 2) {
leaf_slots.push_back(&X[sw_idx]);
break;
}
curr = 2 * curr;
} else {
state[sw_idx] = 0;
if (curr >= K / 2) {
leaf_slots.push_back(&Y[sw_idx]);
break;
}
curr = 2 * curr + 1;
}
}
}
// Total visits to tree = 16 (exactly K).
// Map leaves
// We want exactly 16 hits to Trigger 1.
// The first hit comes from C[0] -> Trigger 1.
// We need 15 more hits to come from the switch tree.
for (int i = 0; i < K; i++) {
if (i < N - 1) {
*(leaf_slots[i]) = 1; // Visits 2 through 16
} else {
*(leaf_slots[i]) = 0; // After the 16th hit, go to Origin
}
}
answer(C, X, Y);
}