#include "speedrun.h"
#include<bits/stdc++.h>
using namespace std;
namespace sub1{
void init(int n, int a[], int b[]){
setHintLen(n);
for(int i = 1; i < n; i++){
setHint(a[i], b[i], 1);
setHint(b[i], a[i], 1);
}
}
void solve(int n, int start){
vector<vector<int>>g(n + 1);
function<void(int, int)>dfs;
dfs = [&] (int s, int p){
if(g[s].empty()){
for(int i = 1; i <= n; i++){
if(getHint(i)){
g[s].push_back(i);
}
}
}
for(int& d : g[s]){
if(d != p){
goTo(d);
dfs(d, s);
goTo(s);
}
}
};
dfs(start, -1);
}
}
namespace sub2{
void init(int n, int a[], int b[]){
}
void solve(int n, int start){
}
}
namespace sub3{
void init(int n, int a[], int b[]){
}
void solve(int n, int start){
}
}
namespace sub45{
void init(int n, int a[], int b[]){
}
void solve(int n, int start){
}
}
void assignHints(int subtask, int n, int a[], int b[]){
if(subtask == 1 || true){
sub1::init(n, a, b);
}
else if(subtask == 2){
sub2::init(n, a, b);
}
else if(subtask == 3){
sub3::init(n, a, b);
}
else{
sub45::init(n, a, b);
}
}
void speedrun(int subtask, int n, int start){
if(subtask == 1 || true){
sub1::solve(n, start);
}
else if(subtask == 2){
sub2::solve(n, start);
}
else if(subtask == 3){
sub3::solve(n, start);
}
else{
sub45::solve(n, start);
}
}