#include #include #include #include #include #include using namespace std; const int sz=20; struct binarytrie{ using Bit=unsigned int; struct node{ int cnt; arraynxt; node():cnt(0),nxt({-1,-1}){} }; vectorv; setEX; Bit XOR; binarytrie():XOR(0u),EX(){v.emplace_back();} void Xor(Bit x){XOR^=x;} void insert(Bit x) { x^=XOR; assert(0<=x&&(x>>sz)==0); if(EX.find(x)!=EX.end())return; EX.insert(x); int p=0; v[p].cnt++; for(int i=sz;i--;) { int j=x>>i&1; if(v[p].nxt[j]==-1) { v[p].nxt[j]=v.size(); v.emplace_back(); } p=v[p].nxt[j]; v[p].cnt++; } } Bit mex()const { int p=0; Bit ret=0; for(int i=sz;i--;) { int need=1<>i&1; if(v[p].nxt[j]==-1)return ret; else if(v[v[p].nxt[j]].cntG[2<<17]; binarytrie ret; int gru[2<<17]; void dfs(int u,int p) { int all=0; binarytrie cur; cur.insert(0); for(int v:G[u])if(v!=p) { dfs(v,u); ret.Xor(all); all^=gru[v]; cur.Xor(gru[v]); if(cur.EX.size()X; void dfs2(int u,int p,int cur) { for(int v:G[u])if(v!=p)cur^=gru[v]; if(cur==0)X.push_back(u); for(int v:G[u])if(v!=p)dfs2(v,u,cur^gru[v]); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>N; for(int i=1;i>u>>v;u--,v--; G[u].push_back(v); G[v].push_back(u); } dfs(0,-1); if(gru[0]==0) { cout<<"Bob"<