// Slower C++ solution:


#include <bits/stdc++.h>

using namespace std;



using ll = long long;

#define f(i,a,b) for (int i = a; i < b; i++)

#define fr(i,a,b) for (int i = b-1; i >= a; i--)



const int mod = 998244353;

const int mxn = 1e5;

int n,K;



void add(ll &a, ll b) { if (b>=mod) b%=mod; a+=b; if (a>=mod) a-=mod; }

ll modpow(ll a, ll b) {

	return b?modpow(a*a%mod,b/2)*(b&1?a:1)%mod:1;

}

struct Comb {

	ll fac[mxn], inv[mxn], twopow[mxn];	

	Comb() {

		f(i,0,mxn) {

			fac[i]=i?fac[i-1]*i%mod:1;

			twopow[i]=i?twopow[i-1]*2%mod:1;

		}

		inv[mxn-1]=modpow(fac[mxn-1],mod-2);

		fr(i,0,mxn-1) {

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

		}

	}

	ll choose(int n, int r) {

		if (n<0||n<r||r<0) return 0;

		return fac[n]*inv[r]%mod*inv[n-r]%mod;

	}

	ll multichoose(int n, int k) {

		if (!n&&!k) return 1;

		return choose(n+k-1,k);

	}

	ll pow2(int n) {

		if (n<0) return 0;

		return twopow[n];

	}

} C;



ll solve(int x) {

	ll ans = 0;

	int a = 0, b = 0;

	f(i,1,K+1) {

		if (i+i==x) b++;

		if (i<=K && x-i<=K && x-i>0) a++;

	}

	a/=2;

	f(na,0,a+1) {

		f(nb,0,b+1) {

			add(ans,C.pow2(na)*C.choose(a,na)%mod*C.multichoose(na+K-2*a-b,n-na-nb));		

		}

	}

	return ans;

}



const int DEBUG = 1;



int main() {

	ios_base::sync_with_stdio(false);

	cin.tie(NULL);

#ifdef LOCAL

	if (DEBUG) freopen("input.txt", "r", stdin);

	if (DEBUG) freopen("output.txt", "w", stdout);

#endif



	cin >> K >> n;

	for (int x = 2; x <= 2*K; x++)

		cout << solve(x) << endl;

	cout << endl;



	return 0;

}




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

using namespace std;



// Optimization



//#pragma GCC optimize("O3")

#define endl '\n'



// Shortcut



#define int long long

#define eb emplace_back

#define pb push_back

#define pob pop_back

#define mp make_pair

#define upb upper_bound

#define lwb lower_bound

#define fi first

#define se second

#define For(i, l, r) for (int i = l; i < r; i++)

#define ForE(i, l, r) for (int i = l; i <= r; i++)

#define Ford(i, r, l) for (int i = r; i > l; i--)

#define FordE(i, r, l) for (int i = r; i >= l; i--)

#define Fora(i, a) for (auto i : a)



// I/O & Debug



#define PrintV(a) Fora(iiii, a) cout << iiii << ' '; cout << endl;

#define PrintVl(a) Fora(iiii, a) cout << iiii << endl;

#define PrintA(a, l, r) for (int iiii = l; iiii <= r; iiii++) cout << a[iiii] << ' '; cout << endl;

#define PrintAl(a, l, r) for (int iiii = l; iiii <= r; iiii++) cout << a[iiii] << endl;

#define Ptest(x) return cout << x, 0;

#define gl(s) getline(cin, s);

#define setpre(x) fixed << setprecision(x)

/*

#define debug(args...){ string _sDEB = #args; replace(_sDEB.begin(), _sDEB.end(), ',', ' '); stringstream _ssDEB(_sDEB); istream_iterator<string> _itDEB(_ssDEB); DEB(_itDEB, args); }

void DEB(istream_iterator<string> it) {}

template<typename T, typename... Args>

void DEB(istream_iterator<string> it, T a, Args... args){

    cout << *it << " = " << a << endl;

    DEB(++it, args...);

}

*/



// Functions



//#define isvowel(a) (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u')

#define bend(a) a.begin(), a.end()

#define rbend(a) a.rbegin(), a.rend()

#define mset(a) memset(a, 0, sizeof(a))

#define mset1(a) memset(a, 1, sizeof(a))

#define msetn1(a) memset(a, -1, sizeof(a))

#define msetinf(a) memset(a, 0x3f, sizeof(a))

#define gcd __gcd

#define __builtin_popcount __builtin_popcountll

//mt19937 rando(chrono::steady_clock::now().time_since_epoch().count());



// Data Structure



#define pque priority_queue

#define mts multiset

#define y0 _y0_

#define y1 _y1_

#define div divi

typedef long long ll;

typedef long double ld;

typedef vector <int> vi;

typedef vector <ll> vll;

typedef vector <ld> vld;

typedef vector <string> vs;

typedef pair <int, int> pii;

typedef pair <ll, ll> pll;

typedef vector <vi > vvi;

typedef vector <vll > vvll;

typedef vector <pii > vpii;

typedef vector <pll > vpll;



/*

==================================+

INPUT:                            |

------------------------------    |



------------------------------    |

==================================+

OUTPUT:                           |

------------------------------    |



------------------------------    |

==================================+

*/;



const int N = 5e3 + 5, mod = 998244353, mod1 = 998244353, mod2 = 1e9 + 9, inf = 1e18 + 7;

const ll infll = 1e18 + 7;



int k, n;

int fac[N], invfac[N];



int binpow(int x, int y){

	int ans = 1;

	while (y){

		if (y & 1) ans = (ans * x) % mod;

		x = (x * x) % mod;

		y >>= 1;

	}

	return ans;

}



int C(int n, int k){

	if (n < k || k < 0) return 0;

	return (fac[n] * ((invfac[k] * invfac[n - k]) % mod)) % mod;

}



signed main(){

    ios_base::sync_with_stdio(0);

    cin.tie(0); cout.tie(0);

    fac[0] = 1; invfac[0] = 1;

    For(i, 1, N){

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

	}

	invfac[N - 1] = binpow(fac[N - 1], mod - 2);

	FordE(i, N - 2, 1){

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

	}

    cin >> k >> n;

    ForE(i, 2, 2 * k){

    	int l = max(1ll, i - k), r = min(k, i - 1), x = (r - l + 1) / 2, y = k - (r - l + 1), ans = 0;

    	ForE(j, 0, x){

    		int val = binpow(2, j);

    		val = (val * C(x, j)) % mod;

    		val = (val * C(y + n - 1, j + y - 1)) % mod;

    		ans = (ans + val) % mod;

		}

		if (i & 1){

			cout << ans << endl;

			continue;

		}

		ForE(j, 0, x){

    		int val = binpow(2, j);

    		val = (val * C(x, j)) % mod;

    		val = (val * C(y + n - 2, j + y - 1)) % mod;

    		ans = (ans + val) % mod;

		}

		cout << ans << endl;

	}

}