#pragma GCCoptimize("O3", "unroll-loops")
#include <cstring>
#include <iostream>
using namespace std;
using ll = long long;

const int MAXN = 102;
const int MAXC = 122505;

ll k, mod, table[MAXN][MAXC], ret[MAXN];
int n, now;

void calc() {
    memset(table, 0, sizeof(table));
    table[0][0] = 1;

    for (int i = 1; i <= n; ++i) {
        int c = (k * (i + 1) * i) >> 1;
        c = min(c, MAXC - 1);
        for (int j = 0; j <= c; ++j) {
            for (int v = 0; v <= k; ++v) {
                int tmp = j + v * i;
                if (tmp > c) break;
                table[i][tmp] += table[i-1][j];
                if (table[i][tmp] >= mod) table[i][tmp] -= mod;
            }
        }
    }
}

int main(){
    ios::sync_with_stdio(0), cin.tie(0);
    while (cin >> n >> k >> mod) {
        calc();
        for (now = 1; now * 2 <= n + 1; now++) {
            ll ans = 0;
            int l = now - 1, r = n - now;

            ans += k * table[l][0] * table[r][0];
            ans %= mod;

            for (int j = 1; j < MAXC; ++j) {
                ans += (k + 1LL) * ((table[l][j] * table[r][j]) % mod);
                ans %= mod;
            }

            ret[now] = ans;
            ret[n - now + 1] = ans;
        }

        for (now = 1; now <= n; ++now) cout << ret[now] << '\n';
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mit map<int,int>::iterator
#define sit set<int>::iterator
#define itrm(g,x) for(mit g=x.begin();g!=x.end();g++)
#define itrs(g,x) for(sit g=x.begin();g!=x.end();g++)
#define ltype int
#define rep(i,j,k) for(ltype(i)=(j);(i)<=(k);(i)++)
#define rap(i,j,k) for(ltype(i)=(j);(i)<(k);(i)++)
#define per(i,j,k) for(ltype(i)=(j);(i)>=(k);(i)--)
#define pii pair<int,int>
#define fi first
#define se second
#define mpr make_pair
#define pb push_back
#define fastio ios::sync_with_stdio(false)
#define check(x) if(x>=mod) x-=mod
const int inf=0x3f3f3f3f;int mod;
const double pi=3.1415926535897932,eps=1e-6;
void chmax(int &x,int y){if(x < y) x = y;}
void chmin(int &x,int y){if(x > y) x = y;}
int n,k;
int dp[105][1000005],sum[105][1000005];
int main()
{
    scanf("%d%d%d",&n,&k,&mod);
    dp[0][0] = 1;
    rep(i,0,n) {
        int mx = i * (i + 1) / 2 * k;int mxmx = (i + 1) * (i + 2) / 2 * k;
        if(i){
            rep(j,0,mx) {
                dp[i][j] = sum[i - 1][j];if(j - i * (k + 1) >= 0) dp[i][j] -= sum[i - 1][j - i * (k + 1)];
                dp[i][j] += mod;dp[i][j] %= mod;
                //rep(l,0,k) if(j - l * i >= 0) {dp[i][j] += dp[i - 1][j - l * i];check(dp[i][j]);}
            }
        }
        rep(j,0,mxmx) {
            sum[i][j] = dp[i][j];if(j >= i + 1) {sum[i][j] += sum[i][j - i - 1];check(sum[i][j]);}
        }
    }
    rep(i,1,n) {
        int mx = n * (n + 1) / 2 * k;
        int res = 0;
        rep(j,0,mx) {res += (ll)dp[i - 1][j] * dp[n - i][j] % mod;check(res);}
        res = ((ll)res * (k + 1) % mod - 1ll + mod) % mod;
        printf("%d\n",res);
    }
    return 0;
}