#include <bits/stdc++.h>
using namespace std;
#define rep(a,b,c) for(int a=(b);a<=(c);a++)
#define per(a,b,c) for(int a=(b);a>=(c);a--)
#define pb push_back
const int N=5e5+5e4+5;
template<class T>inline void read(T &x) {
	T f=1;x=0;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
	x*=f;
}
int n,k,p,f[101][N],ans,g[N],sum;
inline void solve() {
	read(n); read(k); read(p);
	f[0][0]=1;
	rep(i,1,n) {
		sum+=i*k;
		rep(j,0,sum) g[j]=(f[i-1][j]+((j>=i)?(g[j-i]):(0)))%p;
		rep(j,0,sum) f[i][j]=(p+g[j]-(((j-(k+1)*i)>=0)?(g[j-(k+1)*i]):(0)))%p;
	}
	rep(i,1,n) {
		ans=0;
		rep(sm,0,sum) (ans+=1ll*f[n-i][sm]*f[i-1][sm]%p)%=p;
		printf("%d\n",(1ll*ans*(k+1)-1)%p);
	}
}
int main() {
	//int TEST; read(TEST); while(TEST--)
	solve();
}
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int MAXN = 101;
const int MAXSUM = 50 * 99 * 50 + 1;
int dp[MAXN][MAXSUM];

signed main(void) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);

  int N, K, M;
  cin >> N >> K >> M;

  dp[0][0] = 1;

  for (int n(1); n < MAXN; ++n)
    for (int curSum = 0; curSum < MAXSUM; ++curSum) {
      for (int take(0); take <= K and curSum >= take * n; ++take) {
        dp[n][curSum] += dp[n - 1][curSum - take * n];
      }
      dp[n][curSum] %= M;
    }

  for (int x(1); x <= N; ++x) {
    int sol = 0;
    int maxSum = min((N - x) * (N - x + 1) * K / 2, (x - 1) * x * K / 2);
    for (int sum(0); sum <= maxSum; ++sum)
      sol += dp[N - x][sum] * dp[x - 1][sum] % M * (K + !!sum);
    cout << sol % M << '\n';
  }
}
