// Slower C++ solution:
#include<bits/stdc++.h>

#define int long long

using namespace std;

int mod=998244353;



int binpow(int a, int b) 

{

	int ans=1, cac=a;

	while(b)

	{

		if(b%2==1)

		{

			ans=(ans*cac)%mod;

		}

		cac=(cac*cac)%mod;

		b/=2;

	}

	return ans;

}

int n,k;

int dp[2005][2005],h[2005][2005],dr[2005],gt[4005],inv[4005];

int lmao(int n,int m)

{

	if(n==0&&m==0) return 1;

	if(n<=0||m<0) return 0;

	return ((gt[n+m-1]*inv[m])%mod*inv[n-1])%mod;

}

int solve(int val)

{

	int ans=0;

	if(val&1)

	{

		for(int i=1; i<=k; i++) 

		{

			dr[i]=(dp[val/2][i]+dp[val/2][i-1])%mod;

		}

		dr[0]=1;

		for(int i=0; i<=k; i++)

		{

			ans=(ans+lmao(n-val,k-i)*dr[i]%mod)%mod;

		}

	}

	else for(int i=0; i<=k; i++)

	{

		ans=(ans+lmao(n-val,k-i)*dp[val/2][i]%mod)%mod;

	}

	return ans;

}



signed main()

{

	gt[0]=1;

	for(int i=1;i<=4000;i++)

	{

		gt[i]=(gt[i-1]*i)%mod;

	}

	inv[4000]=binpow(gt[4000],mod-2);

	for(int i=3999;i>=0;i--) 

	{

		inv[i]=inv[i+1]*(i+1)%mod;

	}

	cin>>n>>k;

	dp[0][0]=1;

	for(int i=0;i<=k;i++) h[0][i]=1;

	for(int i=1;i<=n/2;i++)

	for(int j=0;j<=k;j++)

	{

		if(j>0) dp[i][j]=2*h[i-1][j-1]%mod;

		dp[i][j]=(dp[i][j]+dp[i-1][j])%mod;

		h[i][j]=(h[i][j-1]+dp[i][j])%mod;

	}

	for(int i=2;i<=2*n;i++)

	{

		int cac=i-1;

		if(cac>n)

		{

			cac=2*n-cac;

		}

		cout<<solve(cac)<<'\n';

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 2.5714178527126808x):
#include<bits/stdc++.h>

using namespace std;

#define y1 A2Dalek

#define y0 Cyberman

#define yn RoseTyler

#define j1 JackHarkness

#define fs first

#define sd second

const int N=6000;

const int oo=1e9+5;

int du[]={-1,0,0,1};

int dv[]={0,-1,1,0};

const long long mod=998244353;

typedef pair<int,int> ii;

typedef pair<int,ii> iii;

long long sqr(long long x) {return x*x;}

int getbit(int state, int i) {return ((state>>i)&1);}



long long Pow2[N+5],tu[N+5],mau[N+5],ans[N+5];

long long Pow(long long x, long long y)

{

    if (y==0) return 1;

    long long tmp=Pow(x,y/2);

    tmp=tmp*tmp%mod;

    if (y%2) return tmp*x%mod;

    return tmp;

}

long long C(int n, int k)

{

    if (k>n) return 0;

    return tu[n]*mau[k]%mod*mau[n-k]%mod;

}

void khoitao()

{

    Pow2[0]=1;

    for (int i=1;i<=N;i++) Pow2[i]=Pow2[i-1]*2%mod;

    tu[0]=1;

    for (int i=1;i<=N;i++) tu[i]=tu[i-1]*i%mod;

    mau[N]=Pow(tu[N],mod-2);

    for (int i=N-1;i>=0;i--) mau[i]=mau[i+1]*(i+1)%mod;

}

int n,k;

int dem(int val)

{

    int tmp=0;

    for (int i=1;i<=k;i++) if (val-i<=k && i<val-i) tmp++;

    return tmp;

}

int main()

{

	//freopen("Stop. Otherwise....inp","r",stdin);

	//freopen("Stop. Otherwise....out","w",stdout);

	ios_base::sync_with_stdio(false);

	khoitao();

    cin>>k>>n;

    for (int val=3;val<=2*k-1;val+=2)

    {

        int g=dem(val);

        for (int num=0;num<=g;num++) ans[val]=(ans[val] + C(n+k-2*g-1,k-2*g+num-1)*C(g,num)%mod*Pow2[num]%mod)%mod;

    }

    for (int val=2;val<=2*k;val+=2)

    {

        int g=dem(val);

        for (int num=0;num<=g;num++)

        {

            ans[val]=(ans[val] + C(n+k-2*g-1-1,k-2*g-1+num-1)*C(g,num)%mod*Pow2[num]%mod)%mod;

            ans[val]=(ans[val] + C(n-1+k-2*g-1-1,k-2*g-1+num-1)*C(g,num)%mod*Pow2[num]%mod)%mod;

        }

    }

    for (int i=2;i<=2*k;i++) cout<<ans[i]<<endl;

	return 0;

}