use proconio::{input, marker::Usize1}; use std::collections::VecDeque; fn main() { input! { n: usize, m: usize, uv: [(Usize1, Usize1); m], l: usize, jk: [(Usize1, usize); l], } let mut graph = vec![vec![]; n]; for (u, v) in uv { graph[u].push(v); graph[v].push(u); } let mut visited = vec![false; n]; let mut queue = VecDeque::new(); for (j, k) in jk { visited[j] = true; if k >= 1 { queue.push_back((j, k)); } } while let Some((pos, count)) = queue.pop_front() { for &next in &graph[pos] { if visited[next] { continue; } visited[next] = true; if count == 1 { continue; } queue.push_back((next, count - 1)); } } if visited[0] { println!("No"); return; } queue.push_back((0, 0)); while let Some((pos, count)) = queue.pop_front() { for &next in &graph[pos] { if visited[next] { continue; } if next == n - 1 { println!("Yes"); println!("{}", count + 1); return; } visited[next] = true; queue.push_back((next, count + 1)); } } println!("No"); }