use itertools::Itertools; use proconio::input; fn main() { input! { n: usize, lr: [(i64, i64); n], } println!( "{}", (0..n) .permutations(n) .fold(0, |acc, p| acc + if is_valid(&p, &lr) { 1 } else { 0 }) ); } fn is_valid(p: &[usize], lr: &[(i64, i64)]) -> bool { let mut diff = 0; for i in 0..p.len() { if diff > lr[p[i]].1 { return false; } diff = diff.max(lr[p[i]].0); } true }