/* Author haleyk10198 */
/* 作者:  haleyk10198 */
/* CF handle: haleyk100198*/
#include <bits/stdc++.h>

#define MOD 998244353
#define LINF (1LL<<60)
#define INF 2147483647
#define PI 3.1415926535897932384626433
#define ll long long
#define pii pair<int,int>
#define mp(x,y) make_pair((x),(y))
#define MAXN 16
#define logMAXN 4

using namespace std;

string itos(int x){
	stringstream ss;
	ss << x;
	return ss.str();
}

complex<double> dp[5][MAXN];

int rev[MAXN];

complex<double> lookup[MAXN]; 

int n, k;

void fft(complex<double> *a, int inv){
	for(int i = 0; i < MAXN; i++){
		if(rev[i] != -1)
			swap(a[rev[i]], a[i]);
	}
	complex<double> now; 
	for(int sz = 2; sz <= MAXN; sz <<= 1){
		int k = MAXN/sz;
		for(int i = 0; i < MAXN; i += sz){
			for(int j = 0; j < sz/2; j++){
				now = lookup[j*k];
				if(sz == MAXN && inv)
					now = conj(now);
				complex<double> x = a[i+j];
				complex<double> y = now*a[i+j+sz/2];
				a[i+j] = x+y;
				a[i+j+sz/2] = x-y;
			}
		}
	}
	if(inv)
		for(int i = 0; i < MAXN; i++)
			a[i] /= MAXN;
}

int main(){
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	ios_base::sync_with_stdio(false);
	cin >> n >> k;
	for(int i = 0; i < MAXN; i++){
		int t = i;
		int j = 0;
		for(int k = 0; k < logMAXN; k++){
			j <<= 1;
			j |= (i%2);
			i >>= 1;
		}
		i = t;
		if(i < j)
			rev[i] = j;
		else
			rev[i] = -1;
	}
	{
		complex<double> now = complex<double>(1, 0);
		complex<double> it = complex<double>(cos(2*PI/MAXN), sin(2*PI/MAXN));
		for(int j = 0; j < MAXN; j++){
			lookup[j] = now;
			now *= it;
		}
	}
	dp[1][0] = dp[0][1] = 1;
	dp[0][0] = 3;
	fft(dp[0], 0);
	for(int i = 0; i < MAXN; i++)
		cout << dp[0][i] << (i+1 == MAXN? '\n': ' ');
	/*for(int now = 2, dx = sizeof(int)*8 - __builtin_clz(n) - 2; now < n; dx--){
		if((n >> dx) % 2){
			for(int i = 0; i < MAXN; i++)
				dp[2][i] = dp[1][i], dp[1][i] = dp[0][i];
			for(int i = 0; i < MAXN; i++)
				dp[0][i] = dp[1][i] + (i? dp[1][i-1] + dp[2][i-1]: 2);
			now ^= 1;
		}
		if((now << 1) <= n){
			now <<= 1;
			for(int i = 0; i < 3; i++)
				fft(dp[i], 0);
			for(int j = 4; j >= 0; j--)
				for(int i = 0; i < MAXN; i++)
					dp[j][i] = dp[j/2][i] * dp[(j+1)/2][i];
			for(int i = 0; i < 5; i++){
				fft(dp[i], 1);
				for(int j = 0; j < MAXN; j++){
					dp[i][j].imag(0);
					dp[i][j].real(lround(fmod(dp[i][j].real(), MOD)));
				}
			}
			for(int i = 0; i < 5; i++){
				for(int k = 1; k < MAXN; k++){
					dp[i][k].real(fmod(dp[i+2][k-1].real()*dp[i+2][k-1].real()+dp[i][k].real(), MOD));
				}
			}
		}
	}
	if(n < 2)
		for(int i = 0; i < k; i++)
			cout << dp[2-n][i].real() << (i == k? '\n': ' ');
	else
		for(int i = 0; i < k; i++)
			cout << dp[0][i].real() << (i == k? '\n': ' ');*/
	return 0;
}

/*
Correct FFT output of dp[0] with a size 8 from online calculators
in a form (real, imag)
4.000000,0.000000
3.923880,-0.382683
3.707107,-0.707107
3.382683,-0.923880
3.000000,-1.000000
2.617317,-0.923880
2.292893,-0.707107
2.076120,-0.382683
2.000000,0.000000
2.076120,0.382683
2.292893,0.707107
2.617317,0.923880
3.000000,1.000000
3.382683,0.923880
3.707107,0.707107
3.923880,0.382683
*/