use proconio::input; const MOD: usize = 1_000_000_007; fn main() { input! { n: usize, a: [usize; n], } if a.contains(&0) { println!("-1"); return; } let mut result = 1; for i in 0..n { let x = a[i]; if x == 1 { continue; } if let Some(fac_x) = factorial(x) { result *= x.pow(fac_x as u32); if result > MOD { println!("{}", MOD); return; } } else { println!("{}", MOD); return; } } if result == 0 { println!("-1"); return; } println!("{}", MOD % result); } fn factorial(n: usize) -> Option { if n == 0 { return Some(1); } let mut result = 1; for i in (1..=n).rev() { result *= i; if result > MOD { return None; } } Some(result) }