#include #include #include #include #include #include #include #include #include #include #define mkp make_pair #define mkt make_tuple #define rep(i,n) for(int i = 0; i < (n); ++i) using namespace std; typedef long long ll; const ll MOD=1e9+7; class DisjointSet{ public: vector rank,p; vector sz; DisjointSet(){} DisjointSet(int size){ rank.resize(size,0); p.resize(size,0); sz.resize(size,0); for(int i=0;irank[y]){ p[y]=x; sz[x]+=sz[y]; }else{ p[x]=y; sz[y]+=sz[x]; if(rank[x]==rank[y]){ rank[y]++; } } } int findSet(int x){ if(x!=p[x]){ p[x]=findSet(p[x]); } return p[x]; } int findSize(int x){ return sz[findSet(x)]; } }; int main(){ int N; cin>>N; vector u(N-1),v(N-1); rep(i,N-1) cin>>u[i]>>v[i]; DisjointSet us(N); vector deg(N,0); rep(i,N-1){ deg[u[i]]++; deg[v[i]]++; if(us.same(u[i],v[i])); else us.unite(u[i],v[i]); } int com=0; rep(i,N) if(us.findSet(i)==i) com++; if(com==1) cout<<"Bob"<