#include <bits/stdc++.h>
using namespace std;

#define NDEBUG
#include <cassert>

typedef long long ll;
typedef long double Double;
typedef unsigned long long ull;
typedef pair<int,int> ii;
typedef pair<ll,ll> llll;
typedef pair<double,double> dd;

typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef vector<ii> vii;
typedef vector<vector<ii>> vvii;
typedef vector<ll> vll;
typedef vector<string> vs;
typedef vector<double> vd;
typedef vector<long double> vD;

#define sz(a)  int((a).size())
#define pb  push_back
#define FOR(var,from,to) for(int var=(from);var<=(to);++var)
#define rep(var,n)  for(int var=0;var<(n);++var)
#define rep1(var,n)  for(int var=1;var<=(n);++var)
#define repC2(vari,varj,n)  for(int vari=0;vari<(n)-1;++vari)for(int varj=vari+1;varj<(n);++varj)
#define ALL(c)  (c).begin(),(c).end()
#define RALL(c)  (c).rbegin(),(c).rend()
#define tr(i,c)  for(auto i=(c).begin(); i!=(c).end(); ++i)
#define found(s,e)  ((s).find(e)!=(s).end())
#define mset(arr,val)  memset(arr,val,sizeof(arr))
#define mid(x,y) ((x)+((y)-(x))/2)
#define IN(x,a,b) ((a)<=(x)&&(x)<=(b))
#define cons make_pair


ll gcd(ll a, ll b) { while(a) swap(a, b%=a); return b; }

const ll MOD=998244353LL;

ll ADD(ll x, ll y) { return (x+y) % MOD; }
ll SUB(ll x, ll y) { return (x-y+MOD) % MOD; }
ll MUL(ll x, ll y) { return x*y % MOD; }
ll MUL3(ll x, ll y, ll z) { return MUL(MUL(x,y), z); }
ll POW(ll x, ll e) { ll v=1; for(; e; x=MUL(x,x), e>>=1) if (e&1) v = MUL(v,x); return v; }
ll DIV(ll x, ll y) { /*assert(y%MOD!=0);*/ return MUL(x, POW(y, MOD-2)); }

vector<ll> combs(ll n) {
    vector<ll> c(n+1);
    ll x = 1LL, a = n, b = 1;
    c[0] = c[n] = 1;
    for (int k=1; k<n; ++k){
        x = DIV(MUL(x, a--), b++);
        c[k] = x;
    }
    return c;
}

vector<vector<ll>> combbox(int h, int w) {
    vector<vector<ll>> b(h, vector<ll>(w));
    rep(r,h) b[r][0] = 1;
    rep(c,w) b[0][c] = 1;
    for (int r=1;r<h;++r){
        for (int c=1;c<w;++c){
            b[r][c] = ADD(b[r-1][c], b[r][c-1]);
        }
    }
    return b;
}


vector<vector<ll>> _B;
vector<ll> pow2(2001);



int num_pairs(int t, int K){
    int cnt = 0;
    for (int a=1,b=t-1; a<b; ++a,--b) {
        if (IN(b, 1, K)) ++cnt;
    }
    return cnt;
}

inline ll f(int k, int n) {
    if (k <= 0) return 0;
    if (n < 0) return 0;
    return _B[k-1][n];
}

ll sub(int t, int K, int N) {
    ll ans = 0;

    int p = num_pairs(t, K);
    vector<ll> pC = combs(p);

    if (t % 2) {
        for (int q=0; q<=p; ++q) {
            int c = p+q, _q = p-q;
            ans += MUL3(f(K-c, N-_q), pC[q], pow2[_q]);
        }
    } else {
        for (int q=0; q<=p; ++q) {
            int c = p+q, _q = p-q;
            ans += MUL3(f(K-1-c, N-_q), pC[q], pow2[_q]);
        }
        for (int q=0; q<=p; ++q) {
            int c = p+q, _q = p-q;
            ans += MUL3(f(K-1-c, N-1-_q), pC[q], pow2[_q]);
        }
    }
    return ans % MOD;
}


void solve(int K, int N) {
    _B = combbox(2001, 2001);

    pow2[0] = 1;
    rep1(i, 2000) pow2[i] = (pow2[i-1] * 2) % MOD;

    for (int t=2; t<=K*2; ++t) {
        cout << sub(t,K,N) << endl;
    }
}

int main() {
    int K, N; cin >> K >> N;
    solve(K, N);
    return 0;
}


Measured memory_bytes: 31616