use std::collections::{BinaryHeap, VecDeque}; use proconio::{input, marker::Usize1}; fn main() { input!{ n: usize, m: usize, uv: [(Usize1, Usize1); m], k: usize, a: [Usize1; k] } let mut g = vec![vec![]; n]; for (u, v) in uv{ g[u].push(v); g[v].push(u); } let mut vis = vec![vec![false; 5]; n]; let mut q = BinaryHeap::new(); q.push((!0usize, 0, 0)); let mut iwai = vec![false; n]; for i in a{ iwai[i] = true; } vis[0][0] = true; while let Some((dist, i, j)) = q.pop() { if i == n - 1{ println!("{}", !dist); return; } for &nv in &g[i]{ if iwai[nv] && j < 4{ if vis[nv][j + 1]{ continue; } vis[nv][j + 1] = true; q.push((dist - 1, nv, j + 1)); } else if !iwai[nv]{ if vis[nv][0]{ continue; } vis[nv][0] = true; q.push((dist - 1, nv, 0)); } } } println!("-1") }