#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,m,n) for(int i=(int)(m) ; i < (int) (n) ; ++i ) #define rep(i,n) REP(i,0,n) using ll = long long; const int inf=1e9+7; const ll longinf=1LL<<60 ; const ll mod=1e9+7 ; struct LowLink { const vector> &g; vector< int > used, ord, low; vector< int > articulation; vector< pair< int, int > > bridge; LowLink(const vector> &g) : g(g) {} int dfs(int idx, int k, int par) { used[idx] = true; ord[idx] = k++; low[idx] = ord[idx]; bool is_articulation = false; int cnt = 0; for(auto &to : g[idx]) { if(!used[to]) { ++cnt; k = dfs(to, k, idx); low[idx] = min(low[idx], low[to]); if(par!=-1&&low[to]>=ord[idx])is_articulation =true; if(ord[idx] < low[to]) bridge.emplace_back(minmax(idx, (int) to)); } else if(to != par) { low[idx] = min(low[idx], ord[to]); } } if(par==-1&&cnt>1)is_articulation= true; if(is_articulation) articulation.push_back(idx); return k; } virtual int build() { used.assign(g.size(), 0); ord.assign(g.size(), 0); low.assign(g.size(), 0); int k = 0, c = 0; for(int i = 0; i < g.size(); i++) { if(!used[i])++c, k = dfs(i, k, -1); } return c; } }; int main(){ int n; cin>>n; vector> v(n); rep(i,n-1){ int x,y; cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } LowLink ll(v); int ret = ll.build(); if(ret>=4){ cout<<"Alice"<