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

#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)

#define REP(i, n) FOR(i,0,n)

#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)

#define IREP(i, n) IFOR(i,0,n)

#define SORT(a) sort(a.begin(), a.end())

#define REVERSE(a) reverse(a.begin(), a.end())

#define int long long

#define INF 1000000000000000

using namespace std;



typedef vector<int> vec;

typedef vector<vec> mat;

typedef pair<int, int> Pii;



template<typename T>

void readvec(vector<T> &a);

void readindex(vector<int> &a);



int fastpow(int x, int n, int m){

    int a = 1;

    IREP(i, 35){

        a = (a * a) % m;

        if(((n >> i) & 1) == 1) a = (a * x) % m;

    }

    return a;

}



int extgcd(int a, int b, int &x, int &y){

    int d = a;

    if(b != 0){

        d = extgcd(b, a % b, y, x);

        y -= (a / b) * x;

    }else{

        x = 1;

        y = 0;

    }

    return d;

}



int mod_inverse(int a, int m){

    int x, y;

    extgcd(a, m, x, y);

    return (m + x % m) % m;

}



class Combination

{



public:



    vec fact, invfact;

    int MAX_N, mod;



    Combination(int MAX_N, int mod): MAX_N(MAX_N), mod(mod) {

        fact = vec(MAX_N + 1);

        invfact = vec(MAX_N + 1);

        fact[0] = 1; invfact[0] = 1;

        FOR(i, 1, MAX_N + 1){

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

            invfact[i] = mod_inverse(fact[i], mod);

        }

    }



    int comb(int n, int r){

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

        int a = fact[n];

        a = (a * invfact[r]) % mod;

        a = (a * invfact[n - r]) % mod;

        return a;

    }

};



signed main(){



    int K, N; cin >> K >> N;

    int mod = 998244353;



    Combination C(5000, mod);



    vec pow2(2001);

    REP(i, 2001) pow2[i] = fastpow(2, i, mod);



    FOR(i, 2, 2 * K + 1){

        int ans = 0;

        if(i % 2 == 1){

            int dmax = min(i / 2, (2 * K + 2 - i) / 2);

            int K2 = K - dmax * 2;

            FOR(d, 0, dmax + 1){

                int tmp = (C.comb(dmax, d) * C.comb(N + K2 - 1, N - d)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

            }

        }



        if(i % 2 == 0){

            int dmax = min(i / 2, (2 * K + 2 - i) / 2) - 1;

            int K2 = K - dmax * 2 - 1;

            FOR(d, 0, dmax + 1){

                // (i/2,i/2)なし

                int tmp = (C.comb(dmax, d) * C.comb(N + K2 - 1, N - d)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

                // (i/2,i/2)あり

                tmp = (C.comb(dmax, d) * C.comb(N + K2 - 2, N - d - 1)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

            }   

        }



        cout << ans << endl;

        

    }



    

    return 0;

}





template<typename T>

void readvec(vector<T> &a){

    REP(i, a.size()){

        cin >> a[i];

    }

}

void readindex(vector<int> &a){

    REP(i, a.size()){

        cin >> a[i];

        a[i]--;

    }

}

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

#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)

#define REP(i, n) FOR(i,0,n)

#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)

#define IREP(i, n) IFOR(i,0,n)

#define SORT(a) sort(a.begin(), a.end())

#define REVERSE(a) reverse(a.begin(), a.end())

#define int long long

#define INF 1000000000000000

using namespace std;

 

typedef vector<int> vec;

typedef vector<vec> mat;

typedef pair<int, int> Pii;

 

template<typename T>

void readvec(vector<T> &a);

void readindex(vector<int> &a);

 

int fastpow(int x, int n, int m){

    int a = 1;

    IREP(i, 64){

        a = (a * a) % m;

        if(((n >> i) & 1) == 1) a = (a * x) % m;

    }

    return a;

}



class Combination

{

public:



    vec fact, invfact;

    int MAX_N, mod;



    Combination(int MAX_N, int mod): MAX_N(MAX_N), mod(mod) {

        fact = vec(MAX_N + 1);

        invfact = vec(MAX_N + 1);

        fact[0] = 1;

        FOR(i, 1, MAX_N + 1){

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

        }

        invfact[MAX_N] = fastpow(fact[MAX_N], mod - 2, mod);

        IREP(i, MAX_N){

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

        }

    }



    int comb(int n, int r){

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

        int a = fact[n];

        a = (a * invfact[r]) % mod;

        a = (a * invfact[n - r]) % mod;

        return a;

    }

};

 

signed main(){

 

    int K, N; cin >> K >> N;

    int mod = 998244353;

 

    Combination C(5000, mod);

 

    vec pow2(2001);

    REP(i, 2001) pow2[i] = fastpow(2, i, mod);

 

    FOR(i, 2, 2 * K + 1){

        int ans = 0;

        if(i % 2 == 1){

            int dmax = min(i / 2, (2 * K + 2 - i) / 2);

            int K2 = K - dmax * 2;

            FOR(d, 0, dmax + 1){

                int tmp = (C.comb(dmax, d) * C.comb(N + K2 - 1, N - d)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

            }

        }

 

        if(i % 2 == 0){

            int dmax = min(i / 2, (2 * K + 2 - i) / 2) - 1;

            int K2 = K - dmax * 2 - 1;

            FOR(d, 0, dmax + 1){

                // (i/2,i/2)なし

                int tmp = (C.comb(dmax, d) * C.comb(N + K2 - 1, N - d)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

                // (i/2,i/2)あり

                tmp = (C.comb(dmax, d) * C.comb(N + K2 - 2, N - d - 1)) % mod;

                tmp = (tmp * pow2[d]) % mod;

                ans = (ans + tmp) % mod;

            }   

        }

 

        cout << ans << endl;

        

    }

 

    

    return 0;

}

 

 

template<typename T>

void readvec(vector<T> &a){

    REP(i, a.size()){

        cin >> a[i];

    }

}

void readindex(vector<int> &a){

    REP(i, a.size()){

        cin >> a[i];

        a[i]--;

    }

}