use ac_library::Dsu; use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, m: usize, edges: [(Usize1, Usize1); m], } let mut dsu = Dsu::new(n); let mut graph = vec![vec![]; n]; for &(u, v) in &edges { if !dsu.same(u, v) { dsu.merge(u, v); graph[u].push(v); graph[v].push(u); } } let mut color = vec![false; n]; let mut stack = vec![]; for root in 0..n { stack.push((root, !0)); while let Some((v, p)) = stack.pop() { for &u in &graph[v] { if u == p { continue; } color[u] = !color[v]; stack.push((u, v)); } } } let ans = edges.iter().all(|&(u, v)| color[u] != color[v]); println!("{}", if ans { "Yes" } else { "No" }); }