#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream>
#include <random>
#include <map>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <assert.h>
#include <complex>
#include <omp.h>
using namespace std;
#define eps 0.000001
#define LONG_INF 10000000000000
#define GOLD 1.61803398874989484820458
#define seg_size 65536*4
#define REP(i,n) for(long long i = 0;i < n;++i)
unsigned long xor128() {
	static unsigned long x = time(NULL), y = 362436069, z = 521288629, w = 88675123;
	unsigned long t = (x ^ (x << 11));
	x = y; y = z; z = w;
	return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));
}
const long long MOD = 998244353;
long long inv(long long a) {
	long long neko = MOD - 2;
	long long ans = 1;
	while (neko != 0) {
		if (neko % 2 == 1) {
			ans *= a;
			ans %= MOD;
		}
		a *= a;
		a %= MOD;
		neko /= 2;
	}
	return ans;
}
long long power(long long a, long long neko) {
	long long ans = 1;
	while (neko != 0) {
		if (neko % 2 == 1) {
			ans *= a;
			ans %= MOD;
		}
		a *= a;
		a %= MOD;
		neko /= 2;
	}
	return ans;
}
long long ans_log[10000] = {};
int main() {
	int n, k;
	cin >> k >> n;
	for (int i = 2; i <= 2 * k; ++i) {
		if (ans_log[2 * k - i + 2] != 0) {
			cout << ans_log[2 * k - i + 2] << endl;
			continue;
		}
		if (i % 2 == 1) {
			long long base = k - i + 1;
			long long kouho = i / 2;
			long long ans = 0;
			long long geko = 1;
			long long bobo = 1;
			for (long long i = 0; i < n; ++i) {
				bobo *= inv(i + 1);
				bobo %= MOD;
				if (base + n - 1LL - i != 0) {
					bobo *= (base + n - 1LL - i);
				}
				bobo %= MOD;
			}
			for(long long i = 0; i <= kouho && i <= n; ++i) {
				if (i == 0 && base == 0) {
				}
				else {
					ans += bobo * geko;
					ans %= MOD;
					bobo *= inv(base + n - 1LL - (n - i - 1LL));
					bobo %= MOD;
				}
				bobo *= (n - i);
				bobo %= MOD;
				geko *= (kouho - i);
				geko %= MOD;
				geko *= 2LL;
				geko *= inv(i + 1);
				geko %= MOD;
			}
			cout << ans << endl;
			ans_log[i] = ans;
		}
		else {
			long long final_ans = 0;
			{
				long long ans = 0;
				long long base = k - i + 1;
				long long kouho = i / 2 - 1LL;
				long long geko = 1;
				long long bobo = 1;
				for (long long i = 0; i < n; ++i) {
					bobo *= inv(i + 1);
					bobo %= MOD;
					if (base + n - 1LL - i != 0) {
						bobo *= (base + n - 1LL - i);
					}
					bobo %= MOD;
				}
				for (long long i = 0; i <= kouho && i <= n; ++i) {
					if (i == 0 && base == 0) {
					}
					else {
						ans += bobo * geko;
						ans %= MOD;
						bobo *= inv(base + n - 1LL - (n - i - 1LL));
						bobo %= MOD;
					}
					bobo *= (n - i);
					bobo %= MOD;
					geko *= (kouho - i);
					geko %= MOD;
					geko *= 2LL;
					geko *= inv(i + 1);
					geko %= MOD;
				}
				final_ans += ans;
			}
			{
				n--;
				long long ans = 0;
				long long base = k - i + 1;
				long long kouho = i / 2 - 1LL;
				long long geko = 1;
				long long bobo = 1;
				for (long long i = 0; i < n; ++i) {
					bobo *= inv(i + 1);
					bobo %= MOD;
					if (base + n - 1LL - i != 0) {
						bobo *= (base + n - 1LL - i);
					}
					bobo %= MOD;
				}
				for (long long i = 0; i <= kouho && i <= n; ++i) {
					if (i == 0 && base == 0) {
					}
					else {
						ans += bobo * geko;
						ans %= MOD;
						bobo *= inv(base + n - 1LL - (n - i - 1LL));
						bobo %= MOD;
					}
					bobo *= (n - i);
					bobo %= MOD;
					geko *= (kouho - i);
					geko %= MOD;
					geko *= 2LL;
					geko *= inv(i + 1);
					geko %= MOD;
				}
				final_ans += ans;
				n++;
			}
			final_ans %= MOD;
			cout << final_ans << endl;
			ans_log[i] = final_ans;		
		}
	}
}

Measured memory_bytes: 384