#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <cstdio>
#include <cmath>
#include <limits.h>
using namespace std;
typedef long long LL;
const int N=4005;
const LL M=998244353;

int n,k;
LL C[N][N],cnt[N];

int main() {
	scanf("%d %d",&k,&n);
	// pw[0]=1;
	// for(int i=1;i<=n;i++) {
	// 	pw[i]=pw[i-1]*k%M;
	// }
	C[0][0]=1;
	for(int i=1;i<=k+n;i++) {
		C[i][0]=1;
		for(int j=1;j<=i;j++) {
			C[i][j]=(C[i-1][j]+C[i-1][j-1])%M;
			//printf("C[%d][%d]=%lld\n",i,j,C[i][j]);
		}
	}
	cnt[0]=1;
	for(int i=1;i<=n;i++) {
		cnt[i]=C[k+i-1][k-1];
	}
	for(int i=2;i<=2*k;i++) {
	//for(int i=62;i<=62;i++) {
		LL ans=cnt[n];
		int t=0;
		if(i%2==1) {
			t=min(i/2,k-i/2);
		}
		else {
			t=min(i/2-1,k-i/2);
		}
		for(int j=1;j<=(i%2==0?t+1:t) && n>=j*2;j++) {
			LL x=(C[t][j]+(i%2==0?C[t][j-1]:0))%M*cnt[n-j*2]%M;
			//printf("i=%d j=%d x=%lld\n",i,j,x);
			ans=(ans+(j%2==0?1:-1)*x+M)%M;
		}
		printf("%lld\n",ans);
	}
}
