#include<bits/stdc++.h>
template<typename _Tp>void read(_Tp &x){
	char ch=getchar();bool f=0;while(!isdigit(ch))f|=ch=='-',ch=getchar();
	x=ch&15,ch=getchar();while(isdigit(ch))x=x*10+(ch&15),ch=getchar();
	if(f)x=-x;
}
template<typename _Tp,typename ...Args>void read(_Tp &x,Args &...args){read(x),read(args...);}
const int N=505;int mod;typedef long long ll;
template<typename _Tp1,typename _Tp2>inline void add(_Tp1 &a,_Tp2 b){a=a+b>=mod?a+b-mod:a+b;}
template<typename _Tp1,typename _Tp2>inline void sub(_Tp1 &a,_Tp2 b){a=a<b?a+mod-b:a-b;}
int f[N][N],ans,n;
int calc(int st){
	for(int i=0;i<=n;++i)for(int j=0;j<=n;++j)f[i][j]=0;
	f[n][1]=1;
	for(int i=n-1;i>=1;--i){
		if(st>>(i-1)&1){
			for(int j=0;j<=n-i;++j){
				add(f[i][j+1],1LL*j*f[i+1][j]%mod);
				sub(f[i][j],1LL*j*f[i+1][j]%mod);
			}
		}
		else{
			for(int j=0;j<=n-i;++j)add(f[i][j],1LL*j*f[i+1][j]%mod);
		}
	}
	int ans=0;for(int i=0;i<=n;++i)add(ans,f[1][i]);
	return ans;
}
/*
int p[N];
void dfs(int dep){
	if(dep==n+1){
		int st=(1<<n)-1;
		for(int i=2;i<=n;++i)if(st>>(p[i]-1)&1)st^=1<<(p[i]-1);
		calc(st);
		return;
	}
	for(int i=1;i<dep;++i)p[dep]=i,dfs(dep+1);
}
*/
int sum[1024];
int solve(int n){
	ans=0,::n=n;//dfs(2);
	memset(sum,0,sizeof(sum));
	int ans=0;
	for(int st=0;st<1<<n;++st){
		int coef=1,tot=st>>0&1;
		for(int i=2;i<=n;++i){
			coef=1LL*coef*(i-1-tot)%mod;
			tot+=st>>(i-1)&1;
		}
		for(int T=0;T<1<<n;++T)if((st&T)==T){
			int c=__builtin_popcount(T^st)%2?mod-1:1;
			add(sum[T],1LL*coef*c%mod);
			add(ans,1LL*coef*c%mod*calc(T)%mod);
		}
	}
	for(int i=0;i<1<<n;++i)fprintf(stderr,"%d%c",sum[i]," \n"[i+1==(1<<n)]);
	return ans;
}
int main(){
	int n;read(n,mod);
	for(int i=2;i<=n;++i)printf("%d\n",solve(i));
	return 0;
}
