use proconio::input; fn main() { input! { n: usize, m: u64, } let ans = solve(n, m); println!("{}", ans); } fn solve(n: usize, m: u64) -> u64 { if n % 3 != 0 { return 0; } let n = n / 3; let mut dp = vec![0; n + 1]; // one let mut ep = vec![0; n + 1]; // multi ep[0] = 1; for i in 1..=n { dp[i] = ((0..i).map(|j| ep[j] * ep[i - 1 - j] % m).sum::()) % m; ep[i] = (dp[i] + (1..i).map(|j| ep[j] * dp[i - j] % m).sum::()) % m; } ep[n] }