#include<iostream>
#include<algorithm>
 
using namespace std;
typedef long long ll;
 
int N, K;
const ll MOD = 998244353;
ll F[4002], F_inv[4002];
 
ll modpow(ll a, ll b) {
	ll rtn = 1, kakeru = a;
	while (b > 0) {
		if (b & 1)rtn *= kakeru;
		kakeru *= kakeru;
		kakeru %= MOD;
		rtn %= MOD;
		b >>= 1;
	}
	return rtn;
}
 
void calc_fac() {
	F[0] = 1, F[1] = 1;
	for (int i = 2; i <= 4001; i++) {
		F[i] = F[i - 1] * i;
		F[i] %= MOD;
	}
 
	F_inv[4001] = modpow(F[4001], MOD - 2);
	for (int j = 4000; j >= 0; j--) {
		F_inv[j] = F_inv[j + 1] * (j + 1);
		F_inv[j] %= MOD;
	}
 
}
 
ll comb(ll a, ll b) {
	if (a < 0)return 0;
	if (b < 0)return 0;
	if (b > a)return 0;
	ll ans = (F[a] * F_inv[b])%MOD * F_inv[a - b];
	return ans % MOD;
}
 
ll hcomb(ll a, ll b) {
	return comb(a + b - 1, b);
}
 
int main() {
 
	calc_fac();
 
	cin >> K >> N;
	
	for (int i = 2; i <= 2 * K; i++) {
		if (i % 2 == 1) {
			ll cnt = 0;
			int A = min((i - 1) / 2, (2 * (K + 1) - i) / 2);
			for (int j = 0; j <= A; j++) {
				ll tmp = 1;
				tmp *= (modpow(2, j) * comb(A, j)) % MOD;
				tmp *= hcomb(K - 2 * A + j, N - j);
				tmp %= MOD;
				cnt += tmp;
				cnt %= MOD;
			}
			cout << cnt << endl;
		}
		else {
			ll cnt = 0;
			int A = min((i) / 2, (2 * (K + 1) - i) / 2) - 1;
			for (int j = 0; j <= A; j++) {
				ll tmp = 1;
				tmp *= (modpow(2, j) * comb(A, j)) % MOD;
				ll a = hcomb(K - 2 * A + j - 1, N - j) + hcomb(K - 2 * A + j - 1, N - j - 1);
				a %= MOD;
				tmp *= a;
				tmp %= MOD;
				cnt += tmp;
				cnt %= MOD;
			}
			cout << cnt << endl;
		}
	}
 
	return 0;
}
#include<bits/stdc++.h>
using namespace std ;
#define Next( i, x ) for( register int i = head[x]; i; i = e[i].next )
#define rep( i, s, t ) for( register int i = (s); i <= (t); ++ i )
#define drep( i, s, t ) for( register int i = (t); i >= (s); -- i )
#define re register
#define int long long
int gi() {
	char cc = getchar() ; int cn = 0, flus = 1 ;
	while( cc < '0' || cc > '9' ) {  if( cc == '-' ) flus = - flus ; cc = getchar() ; }
	while( cc >= '0' && cc <= '9' )  cn = cn * 10 + cc - '0', cc = getchar() ;
	return cn * flus ;
}
const int N = 4000 + 5 ; 
const int P = 998244353 ; 
int maxn, n, K, C[N][N], Ans[N] ; 
signed main()
{
	K = gi(), n = gi(), maxn = n + K ; 
	C[0][0] = 1 ; 
	rep( i, 1, maxn ) rep( j, 0, maxn ) C[i][j] = (!j) ? 1 : ( C[i - 1][j - 1] + C[i - 1][j] ) % P ; 
	for( re int i = 2; i <= 2 * K; ++ i ) {
		int u = 0, v = 0 ; 
		rep( j, 1, K ) 
			if( ((i - j) != j) && ( (i - j) <= K ) && ( (i - j) >= 1 ) ) ++ u ; 
			else if( (i - j) != j ) ++ v ;
		u /= 2, v += u ; 
		if( i % 2 == 0 ) ++ u ; 
		for( re int j = 0; j <= n; ++ j ) {
			Ans[i] = ( Ans[i] + C[u][j] * C[(n - j) + v - 1][(n - j)] % P ) % P ;
		}
	}
	rep( i, 2, 2 * K ) printf("%lld\n", Ans[i] ) ;
	return 0 ;
}