#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
#define m_p make_pair
#define sz(x) (int)x.size()
#define line cerr<<"--------------------\n";
#define see(x) cerr<<x<<" "
#define seeln(x) cerr<<x<<endl
#define out(x) cerr<<#x<<" = "<<x<<" "
#define outln(x) cerr<<#x<<" = "<<x<<endl
#define outarr(x,l,r) cerr<<#x"["<<l<<"-"<<r<<"] = "; for (int _i=l;_i<=r;++_i) cerr<<x[_i]<<" ";cerr<<endl;
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
#define gc() getchar()
//char buf[1<<23],*p1=buf,*p2=buf;
//#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
template <class T> void read(T &x)
{
    x=0; char c=gc(); int flag=0;
    while (c<'0'||c>'9') flag|=(c=='-'),c=gc();
    while (c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=gc();
    if (flag) x=-x;
}
template <class T> inline T _max(T a,T b){return a>b ? a : b;}
template <class T> inline T _min(T a,T b){return a<b ? a : b;}
template <class T> inline bool checkmax(T &a,T b){return b>a ? a=b,1 : 0;}
template <class T> inline bool checkmin(T &a,T b){return b<a ? a=b,1 : 0;}
int n,k,mod;
int Add(int x,int y){x+=y; return x>=mod ? x-mod : x;}
int Sub(int x,int y){x-=y; return x<0 ? x+mod : x;}
int Mul(int x,int y){return (ll)x*y%mod;}
void add(int &x,int y){x=Add(x,y);}
void sub(int &x,int y){x=Sub(x,y);}
void mul(int &x,int y){x=Mul(x,y);}
int dp[102][128000];
void init()
{
	read(n); read(k); read(mod);
	dp[0][0]=1;
	for (int i=1;i<=n;++i)
	{
		int tmp=_min(i,50);
		for (int r=0;r<=k;++r)
		{
			for (int j=r*i;j<=tmp*(tmp+1)/2*k;++j)
			{
				add(dp[i][j],dp[i-1][j-r*i]);
			}
		}
	}
}

int calc(int x)
{
	int tmp=_min(x-1,n-x);
	int ans=0;
	for (int i=0;i<=tmp*(tmp+1)/2*k;++i)
	{
		if (i) add(ans,Mul(Mul(dp[x-1][i],dp[n-x][i]),k+1));
		else add(ans,k);
	}
	return ans;
}

void solve()
{
	for (int i=1;i<=n;++i)
	{
		printf("%d\n",calc(i));
	}
}

int main()
{
	init();
	solve();
	return 0;
}

/* Average = a is the same as sum of abs(i-a) = 0
 * which is the same as sum of i-a (for all i to the left) = a-i (for all i to the right)
 * so let dp[i][j] = number of ways to form sum of j using 1...i
 */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define FOR(i, a, b) for(ll i = (ll)a; i <= (ll)b; i++)
#define DEC(i, a, b) for(ll i = (ll)a; i >= (ll)b; i--)
typedef pair<ll, ll> pi;
typedef pair<pi, ll> pii;
typedef pair<ll, pi> ipi;
typedef pair<pi, pi> pipi;
#define mp make_pair
#define f first
#define s second
typedef vector<ll> vi;
typedef vector<pi> vpi;
typedef vector<pii> vpii;
#define pb push_back
#define pf push_front
#define all(v) v.begin(), v.end()
#define size(v) (ll) v.size()
#define disc(v) sort(all(v)); v.resize(unique(all(v)) - v.begin());
#define INF (ll) 1e9 + 100
#define LLINF (ll) 1e18
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define sandybridge __attribute__((optimize("Ofast"), target("arch=sandybridge")))
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());    //can be used by calling rng() or shuffle(A, A+n, rng)
inline ll rand(ll x, ll y) { ++y; return (rng() % (y-x)) + x; } //inclusivesss

ll n, k, mod, dp[105][1000005];

int main() {
	fastio; cin >> n >> k >> mod;
	dp[0][0] = 1;
	FOR(i, 1, n) {
		vi v(i, 0);
		FOR(j, 0, k*n*(n+1)/2) {
			ll m = j % i;
			v[m] = (v[m] + dp[i-1][j]) % mod;
			if (j - ((k+1) * i) >= 0) v[m] = (v[m] - dp[i-1][j - ((k+1) * i)] + mod) % mod;
			dp[i][j] = v[m];
		}
	}
	FOR(i, 1, n) {
		ll ans = 0;
		FOR(j, 0, k*i*(i+1)/2) (ans += dp[i-1][j] * dp[n-i][j]) %= mod;
		cout << (ans * (k+1) - 1 + mod) % mod << "\n";
	}
}
