#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<pair<int, int> > vpii;
typedef pair<int, int> pii;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef vector<ll> vll;
#define INF 0x3f3f3f3f
#define MOD 998244353LL
#define EPSILON 0.00001
#define f first
#define s second
#define pb push_back
#define mp make_pair

#define FOR(i, a, b) for (ll i=(a); i<=(signed)(b); i++)
#define F0R(i, a) for (int i=0; i<(signed)(a); i++)
#define RFOR(i, a, b) for (int i=(a); i >= b; i--)

#define MN 4005
ll n, k;

ll fac[MN];

pll gcd(ll a, ll b){ //a*first+b*second=gcd
    if(a == 0){
        return mp(0, 1);
    }

    pll prev = gcd(b%a, a);

    return mp(prev.s-(b/a)*prev.f, prev.f);
} //using ll's just to be safe wrt overflow issues
ll modInv(ll x){ //return x^-1 % MOD
    pll res = gcd(x, MOD);

    res.f = (res.f+MOD)%MOD;

    //cout << "modinv of " << x << " is " << res.f << "\n";

    return res.f;
}
ll modDiv(ll x, ll y){
    return (x*modInv(y))%MOD;
}
ll getFacs(){
    fac[0] = 1;
    FOR(i, 1, MN-1){
        fac[i] = (fac[i-1]*i)%MOD;
    }
}
ll choose(ll a, ll b){
    ll c = a-b;
    if(c < 0){
        cout << "ur bad\n";
        exit(0);
    }

    ll num = fac[a];
    ll denom = (fac[b]*fac[c])%MOD;

    //cout << "num " << num << " denom " << denom << "\n";

    return modDiv(num, denom);
}
ll modExp(ll b, ll ex){
    ll prod = 1;
    while(ex > 0){
        if(ex % 2 == 0){
            b = (b * b) % MOD;
            ex /= 2;
        } else{
            prod = (prod*b) % MOD;
            ex--;
        }
    }
    
    return prod;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    getFacs();

    cin >> k >> n;
    FOR(i, 2, 2*k){
        if(n == 1){
            cout << k << "\n";
            continue;
        }
        //cout << "doing " << i << "\n";
        if(i % 2 == 1){
            ll np = min((i-1)/2, (2*k-i+1)/2);
            ll nup = k-np*2;
            ll sm = 0;
            //cout << np << " " << nup << "\n";
            FOR(j, 0, min(n, np)){
                if(j == 0 && nup == 0) continue;
                ll amt = (choose(np, j)*modExp(2, j))%MOD; //speed this up if tle
                ll val = choose(j+nup-1+n-j, j+nup-1);
                //cout << j << " " << amt << " " << val << "\n";
                sm = (sm+amt*val)%MOD;
            }
            cout << sm << "\n";
        } else{
            ll np = min((i-2)/2, (2*k-i)/2);
            ll nup = k-np*2-1;
            ll sm = 0;
            FOR(j, 0, min(n, np)){
                //cout << "check " << j << "\n";
                ll amt = (choose(np, j)*modExp(2, j))%MOD; //speed this up if tle
                ll val = choose(j+nup-1+n-j, j+nup-1);
                sm = (sm+amt*val)%MOD;
            }
            FOR(j, 0, min(n-1, np)){
                if(j == 0 && nup == 0) continue;
                ll amt = (choose(np, j)*modExp(2, j))%MOD; //speed this up if tle
                ll val = choose(j+nup-1+n-1-j, j+nup-1);
                sm = (sm+amt*val)%MOD;
            }

            cout << sm << "\n";
        }
    }
    
    return 0;
}


Measured memory_bytes: 384