fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut a = String::new(); std::io::stdin().read_line(&mut a).ok(); let a: Vec = a.trim().split_whitespace().map(|s| s.parse::().unwrap()-1).collect(); let mut cnts = vec![0usize; n]; for i in 0..n { cnts[a[i]] += 1; } let mut result = (1..=n as u128).fold(1u128, |x, y| x * y); for i in 0..n { if cnts[i] > 0 { result /= (1..=cnts[i] as u128).fold(1u128, |x, y| x * y); } } println!("{}", result); }