#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
int N=-1, M;
vector<int> X, Y;
vector<bool> st;
int build(int n, int x) {
    if(x==n) return -1;
    if(n==1) return M+1;
    int v = N--;
    X.push_back(M+1);
    Y.push_back(M+1);
    int t = min(x, n/2);
    X[-v-1] = build(n/2, t);
    Y[-v-1] = build(n/2, x-t);
    return v;
}
void create_circuit(int M, vector<int> A) {
    ::M = M;
    vector<int> C(M+1, 0);
    C[0] = A[0];
    A.push_back(0);
    A = vector<int>(A.begin()+1, A.end());
    int n2 = ((1<<__lg(A.size()))!=A.size()) ? (1<<(__lg(A.size())+1)) : A.size();
    fill(C.begin()+1, C.end(), build(n2, n2-A.size()));
    st = vector<bool>(-N-1, 0);
    int ptr=0;
    for(int v=C[0]; v;) {
        if(v>0) {
            if(C[v]==M+1) C[v] = A[ptr++];
            v = C[v];
        }
        else if(st[-v-1]==0) {
            if(X[-v-1]==M+1) X[-v-1] = A[ptr++];
            st[-v-1] = 1;
            v = X[-v-1];
        }
        else {
            if(Y[-v-1]==M+1) Y[-v-1] = A[ptr++];
            st[-v-1] = 0;
            v = Y[-v-1];
        }
    }
    answer(C, X, Y);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |