use proconio::input; fn main() { input! { n: usize, range: [(usize, usize); n] } let rest = (1 << n) - 1; let mut perm = vec![]; enumerate(n, &mut perm, &mut vec![], rest); let ans = perm .iter() .filter(|v| { let mut ok = true; for j in 0..n { for i in 0..j { if range[v[i]].0 > range[v[j]].1 { ok = false; } } } ok }) .count(); println!("{ans}"); } fn enumerate(n: usize, res: &mut Vec>, state: &mut Vec, rest: usize) { if rest == 0 { res.push(state.clone()); return; } for i in 0..n { if rest >> i & 1 == 1 { state.push(i); enumerate(n, res, state, rest ^ 1 << i); state.pop(); } } }