#include "speedrun.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define _ << " " <<
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define ull unsigned long long
#define lll __int128
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define BlueCrowner ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define FOR(i, a, b) for (ll i = (a); i < (b); i++)
#define FORD(i, a, b) for (ll i = (a); i >= (b); i--)
const int maxN = 1e3+5;
int t, in[maxN], cur, cnt;
vector<int> d[maxN];
int par() {
int res=0;
FOR(i, 1, 11) if (getHint(i)) res += (1 << (i - 1));
return res;
}
int next() {
int res=0;
FOR(i, 1, 11) if (getHint(i+10)) res += (1 << (i - 1));
return res;
}
void dfs(int u, int p) {
in[++t]=u;
FOR(i, 1, 11) setHint(u, i, (p & (1 << (i - 1))) > 0);
for (auto &v : d[u])
if (v != p) dfs(v, u);
}
void assignHints(int subtask, int N, int A[], int B[]) {
setHintLen(20);
FOR(i, 1, N) d[A[i]].pb(B[i]), d[B[i]].pb(A[i]);
dfs(1, 1);
FOR(i, 1, N) FOR(j, 1, 11) setHint(in[i], j + 10, (in[i + 1] & (1 << (j - 1))) > 0);
FOR(j, 1, 11) setHint(in[N], j + 10, 0);
}
void speedrun(int subtask, int N, int start) {
int u=start;
while (par() != u) u = par(), goTo(par());
cur = next();
while (cur!=0) {
if (!goTo(cur)) goTo(par());
else cur = next();
}
}