const TAKANA: bool = true; fn main() { proconio::input! { N: usize, edges: [(usize, usize); N - 1], } let mut graph = vec![vec![]; N]; for &(u, v) in &edges { graph[u].push(v); graph[v].push(u); } let mut visited = vec![false; N]; let mut stack = vec![]; for s in 0 .. N { if visited[s] == TAKANA { continue; } let mut size = 0; visited[s] = TAKANA; stack.push(s); while let Some(u) = stack.pop() { size += 1; for &v in &graph[u] { if visited[v] == TAKANA { continue; } // 歩いた跡に高菜を生やしていく visited[v] = TAKANA; stack.push(v); } } if size <= 2 { println!("Alice"); return; } } println!("Bob"); }