use std::collections::HashMap; use itertools::Itertools; use proconio::input; fn main() { input! { n: usize, ab: [(usize, usize); n], } let mut values = ab.iter().flat_map(|&(a, b)| [a, b]).collect_vec(); values.push(1); values.sort_unstable(); values.dedup(); let k = values.len(); let compress: HashMap<_, _> = values.iter().enumerate().map(|(i, &x)| (x, i)).collect(); let mut graph = vec![vec![]; k]; for i in 0..k - 1 { graph[i + 1].push(i); } for &(a, b) in &ab { let a = compress[&a]; let b = compress[&b]; graph[a].push(b); } let mut stack = vec![0]; let mut seen = vec![false; k]; seen[0] = true; let mut ans = 1; while let Some(v) = stack.pop() { ans = ans.max(values[v]); for &u in &graph[v] { if !seen[u] { seen[u] = true; stack.push(u); } } } println!("{ans}"); }