fn main() { println!("{}", solve()); } fn solve() -> usize { let (l, r, m) = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); let mut iter = line.split_whitespace(); ( iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), ) }; if l >= m { return 0; } let mut fac = vec![1]; for i in 1..=r.min(m - 1) { fac.push(*fac.last().unwrap() * i % m); } let mut ret = 0; let mut mul = 1; for i in 0..l { mul = mul * fac[i] % m; } for i in l..=r.min(m - 1) { mul = mul * fac[i] % m; ret = (ret + mul) % m; } ret }