#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=510;
int mod,C[N][N],n;
void add(int &x,int y){x=(x+y>=mod?x+y-mod:x+y);}
namespace brute{
	int f[N][N],g[N][N];
	void solve()
	{
		for(int i=1;i<=n;i++) f[i][1]=1;
		for(int t=2;t<=n;t++)
		{
			for(int i=0;i<=n;i++)
				for(int j=0;j<=n;j++) g[i][j]=f[i][j],f[i][j]=0;
			for(int i=0;i<=n-t+1;i++)
				for(int j=0;j<=t;j++) if(g[i][j])
				{
					if(i) for(int k=1;k<=j;k++) add(f[i-1][k],1ll*g[i][j]*C[j][k-1]%mod);
					for(int k=i;k<n;k++) add(f[k][j+1],1ll*g[i][j]*C[k][i-1]%mod);
				}
//			for(int i=0;i<=n;i++,puts(""))
//				for(int j=0;j<=n;j++) printf("%d ",f[i][j]);
			printf("%d\n",f[0][1]);
		}
	}
}
int main()
{
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout);
	scanf("%d%d",&n,&mod);
	for(int i=C[0][0]=1;i<=n;i++)
		for(int j=C[i][0]=1;j<=n;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
	brute::solve();
	return 0;
}
