#include <bits/stdc++.h>

// #define DEBUG 1

#define int long long
#define for0(i,n) for (int i=0; i<n; i++)
#define iter(c) for(auto it=c.begin(); it!=c.end(); it++)
#define iter2(c) for(auto it2=c.begin(); it2!=c.end(); it2++)
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define X first
#define Y second
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define sz(x) (int)(x).size()
#define pmod(x,m) (((x)%(m)+m)%m)
#ifdef int
#define read(x) scanf("%lld",&x);
#else
#define read(x) scanf("%d",&x);
#endif

#ifdef DEBUG
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<sz(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define priter(v) iter(v) {pr(*it)} nl
#define debug cout<<"ok at line "<<__LINE__<<endl;
#else
#define nl
#define pr(x)
#define prl(x)
#define prp(x)
#define printv(v)
#define printa(a,s)
#define print2D(a,m,n)
#define priter(v)
#define debug
#endif
#define MAXN 2000

using namespace std;

typedef long long ll;

const int INF = 2147483647;
const long long INFL = 9223372036854775807LL;
const double EPSILON = 0.00000001;
const long long MOD = 998244353;

ll f[MAXN+5][MAXN+5];
ll bad[MAXN+5];

long long nCr[MAXN+5][MAXN+5];
void all_combinations(int maxn, long long mod)
{
    //precalculate all the C(n,r)s
    memset(nCr, 0, sizeof(nCr));
    for (int n=0; n<=maxn; n++) {
        nCr[n][n] = nCr[n][0] = 1;
    }
    for (int n=1; n<=maxn; n++){
        for (int r=1; r<n; r++)
            nCr[n][r] = (nCr[n-1][r] + nCr[n-1][r-1])%mod;
    }
}

ll get_ans(int pairs, ll tot)
{
    ll ans = tot;
    for (int p=1; p<=pairs; p++) {
        ll val = (nCr[pairs][p] * bad[p]) % MOD;
        // pr(p) pr(val) nl 
        if (p&1)
            ans = (ans - val) % MOD;
        else 
            ans = (ans + val) % MOD;
    }
    return pmod(ans,MOD); 
}

int32_t main()
{
    #ifdef DEBUG
    //freopen("C.txt","r",stdin);
    //freopen("","w",stdout);
    #endif

    int K,N;
    cin >> K >> N;
    ms(bad,0);
    ms(f,0);
    all_combinations(K,MOD);
    
    for (int k=0; k<=K; k++)
        f[0][k] = 1;
    for (int n=1; n<=N; n++) {
        f[n][1] = 1;
        for (int k=2; k<=K; k++)
            f[n][k] = (f[n][k-1]+f[n-1][k]) % MOD;
    }
    // print2D(f,6,5);
    
    ll tot = f[N][K];
    prl(tot)
    for (int pairs=1; 2*pairs<=N; pairs++) {
        for (int n=N-2*pairs; n>=0; n--) {
            bad[pairs] = (bad[pairs] + f[n][K-1]) % MOD;
        }            
    }
    printa(bad,4)    
    
    for (int i=2; i<=2*K; i++) {
        int h = min(K,i/2);
        int l = max(1,i-K);
        int pairs = h-l+1;
        // pr(i) pr(l) pr(h) pr(pairs) nl 
        // int pairs = 0;
        // for (int x=1; x<=i/2; x++)
            // if (1 <= i-x and i-x <= K)
                // pairs++;
        // pr(i) pr(pairs) nl 
        ll ans = get_ans(pairs, tot);
        cout<<ans<<endl;
    }
    // prl(get_ans(3,tot));
    return 0;
}


Measured memory_bytes: 63232