#include <bits/stdc++.h>
using namespace std;
#include "doll.h"
void create_circuit(int m,vector<int> A){
int n = A.size(); --n;
vector<int> C(m+1,-1); C[0] = A[0];
A.erase(A.begin());
int s = 0;
while((1<<s) <= n) ++s;
vector<int> X,Y;
for (int i(s-1),k(-s-1);i > -1;--i){
if (i==0) X.emplace_back((n&1?-998244353:-1)),Y.emplace_back(0);
else X.emplace_back(((n>>i)&1?exchange(k,k-(1<<i)+1):-1)),Y.emplace_back(-Y.size()-2);
}
vector<vector<int>> Z(s);
for (int i(0),k(0);i < (1<<s);++i){
for (int j(0);j < s;++j) if ((i>>j)%2==0){
if (X[j]<-1) Z[j].emplace_back(k++);
break;
}
}
if (n&1) X[s-1] = A[Z[s-1][0]],Z[s-1].clear();
for (int i(0);i < s;++i) if (!Z[i].empty()){
queue<vector<int>> que; que.emplace(Z[i]);
while(!que.empty()){
vector<int> B = que.front(); que.pop();
if (B.size()&1){
if (X[B.back()]==0) X[B.back()] = -X.size()-1;
else Y[B.back()] = -X.size()-1;
B.pop_back();
}
X.emplace_back(0),Y.emplace_back(0);
if (B.size()==2){
X.back() = A[B[0]],Y.back() = A[B[1]];
continue;
}
vector<int> D,E;
for (int k(0);k < (int)B.size();++k) (k&1?E:D).emplace_back(B[k]);
D.emplace_back(X.size()-1),E.emplace_back(X.size()-1);
que.emplace(D),que.emplace(E);
}
}
answer(C,X,Y);
}