#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define N 111
#define NN 131000
template <typename T> inline void read(T &x) {
	x = 0; char c = getchar(); bool flag = false;
	while (!isdigit(c)) { if (c == '-')	flag = true; c = getchar(); }
	while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); }
	if (flag)	x = -x;
}
using namespace std;
int n, K, P;
int ans[N], lmt[N];
int f[2][NN], g[2][NN], sum[NN];
inline void Try(int mid) {
	memset(f, 0, sizeof(f));
	memset(g, 0, sizeof(g));
	memset(sum, 0, sizeof(sum));
	int up = min(lmt[mid - 1], lmt[n - mid]);
	int nw = 0; f[nw][0] = 1;
	for (int i = 1; i < mid; ++i) {
		nw ^= 1;
		int d = mid - i;
		for (int j = 0; j <= up; ++j) {
			if (j - d >= 0)	sum[j] = (sum[j - d] + f[nw ^ 1][j]) % P;
			else	sum[j] = f[nw ^ 1][j];
		}
		for (int j = 0; j <= up; ++j) {
			if (j - (K+1) * d < 0)	f[nw][j] = sum[j];
			else	f[nw][j] = (sum[j] - sum[j - (K+1) * d] + P) % P;
		}
	}
	if (nw)	memcpy(f[0], f[1], sizeof(f[1]));
	nw = 0; g[nw][0] = 1;
	for (int i = mid + 1; i <= n; ++i) {
		nw ^= 1;
		int d = i - mid;
		for (int j = 0; j <= up; ++j) {
			if (j - d >= 0)	sum[j] = (sum[j - d] + g[nw ^ 1][j]) % P;
			else	sum[j] = g[nw ^ 1][j];
		}
		for (int j = 0; j <= up; ++j) {
			if (j - (K+1) * d < 0)	g[nw][j] = sum[j];
			else	g[nw][j] = (sum[j] - sum[j - (K+1) * d] + P) % P;
		}
	}
	if (nw)	memcpy(g[0], g[1], sizeof(g[1]));
	for (int j = 0; j <= up; ++j) if (f[0][j] && g[0][j]) {
		ans[mid] = (ans[mid] + 1ll * f[0][j] * g[0][j] % P * (K + 1)) % P;
	}
}
int main() {
	read(n), read(K), read(P);
	for (int i = 1; i <= n; ++i)	lmt[i] = lmt[i - 1] + K * i;
	for (int i = 1; i <= (n + 1) >> 1; ++i)	Try(i);
	for (int i = 1; i <= n; ++i) if (!ans[i])	ans[i] = ans[n - i + 1];
	for (int i= 1; i <= n; ++i) {
		printf("%d\n", ((ans[i] - 1 + P) % P + P) % P);
	}
	return 0;
}


/*
3 1 998244353
//1 3 1

10 8 861271909

100 100 7
*/
#include <bits/stdc++.h>
using namespace std;

using ll=long long;
ll dp[101][127501],n,k,m;
void pls(ll &a,ll b){
  a+=b;if(a>=m)a-=m;
}

int main(){
  dp[0][0]=1;
  cin>>n>>k>>m;
  for(int j=0;j<n;j++)
    for(int l=0;l<=((j+1)*(j+2)/2)*k;l++)
      for(int i=0;i<=k&&l+(j+1)*i<127501;i++)
        pls(dp[j+1][l+(j+1)*i],dp[j][l]);
  for(int i=1;i<=n;i++){
    ll L=i-1,R=n-i,ans=0;
    for(int l=0;l<=min(L,R)*(min(L,R)+1)/2*k;l++)pls(ans,dp[L][l]*dp[R][l]%m);
    cout<<(ans*(k+1)-1)%m<<"\n";
  }
}
