#pragma GCC optimize("Ofast") #pragma GCC target("avx2") char*mmap(); #define rd(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} char wbuf[1<<25]; #define wt(v) {long _z=v;do*--wp=_z%10+48;while(_z/=10);} #define rep(v,e) for(int v=0;v=e;) #define max(a,b) (a>=b?a:b) #define min(a,b) (a<=b?a:b) #define W 10001 int dp[301*W]; main(){ char rbuf[64]; read(0,rbuf,sizeof rbuf); char*rp=rbuf; rd(n); rd(m); int klim=n*(n-1)/2+1; dp[n*2*W+0]=1; rep(i,n*2){ int *dpi=dp+(n*2-i-1)*W; int jmax=i+3>>1; int klimi=min(klim,(i+1)/2*(i/2)+1); rep3(j,max(-n+i+1,0),jmax){ int *dpij=dpi+j*W; rep3(k,j,klimi){ int x=dpij[k]+dpij[k-j+W]; dpij[k]=x-(x>=m?m:0); } } { int j=i+3>>1; int *dpij=dpi+j*W; rep(k,klimi){ dpij[k]=0; } } } char*wp=wbuf+sizeof wbuf; rrep3(k,n*n+1,klim){ *--wp=10; *--wp='0'; } rrep(k,klim){ *--wp=10; wt(dp[n*W+k]); } write(1,wp,wbuf+sizeof wbuf-wp); _exit(0); }