fn main() { let mut nm = String::new(); std::io::stdin().read_line(&mut nm).ok(); let nm: Vec = nm.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nm[0]; let MOD = nm[1]; let LIMIT = (0..n).sum::(); let mut dp = vec![vec![0usize; LIMIT+1]; 1]; dp[0][0] = 1; for i in 1..=n { let mut next_dp = vec![vec![0usize; LIMIT+1]; i+1]; for j in 0..i { for k in 0..=LIMIT { if dp[j][k] == 0 { continue; } for nj in j..=i { let diff = (nj - j) * (n - i); next_dp[nj][diff+k] += dp[j][k]; next_dp[nj][diff+k] %= MOD; } } } dp = next_dp; } for i in 0..=LIMIT { println!("{}", dp[n][i]); } for i in LIMIT+1..=n*n { println!("0"); } }