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 = n * (n-1) / 2; let mut dp = vec![vec![vec![0usize; limit+1]; n+1]; 2*n+1]; dp[1][0][0] = 1; for i in 1..2*n { for j in 0..=n { for cnt in 0..=limit { if dp[i][j][cnt] == 0 { continue; } dp[i+1][j][cnt] += dp[i][j][cnt]; dp[i+1][j][cnt] %= MOD; if j < n && (i+1)/2 >= j+1 { let zero_used = i - j; if cnt+n >= zero_used { dp[i+1][j+1][cnt+n-zero_used] += dp[i][j][cnt]; dp[i+1][j+1][cnt+n-zero_used] %= MOD; } } } } } for i in 0..=limit { println!("{}", dp[2*n][n][i]); } for i in limit+1..=n*n { println!("0"); } }