#include <stdio.h>
#include <assert.h>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <array>
#include <vector>
#include <queue>
#include <set>
#include <cmath>
//#include <unordered_map>
//#include <unordered_set>
//#include <boost/container/static_vector.hpp>
//#include <boost/unordered_set.hpp>
//#include <boost/unordered_map.hpp>
//#include <unistd.h>

//#include <cv.h>
//#include <highgui.h>
#include <stdlib.h>
#include <time.h>

#include <string>

long long pow_mod(long long x, long long n, long long mod_num) {
    long long res = 1;
    while (n > 0) {
        if (n & 1) { res = (res * x) % mod_num; }
        x = (x * x) % mod_num;
        n = (n >> 1);
    }
    return res;
}

class Combi_Num {
    public:
    long long mod_num;
    std::vector<long long> fac, den;
    Combi_Num() {}
    Combi_Num(const int n, const int mod_num_in) {
        mod_num = mod_num_in;
        fac.resize(n+1, 0);
        den.resize(n+1, 0);
        fac[0] = 1;
        den[0] = 1;
        for (int i = 1; i <= n; i++) {
            fac[i] = (fac[i-1] * i) % mod_num;
            den[i] = (den[i-1] * pow_mod(i, mod_num - 2, mod_num)) % mod_num;
        }
    }

    long long calc(const int n, const int r) {
        return (fac[n] * ((den[r] * den[n-r]) % mod_num)) % mod_num;
    }
};

const long long MOD = 998244353;
const long long MAX_N = 2000;

Combi_Num combi_num(MAX_N * 10, MOD);

long long select_num(const int total, const int kind) {
    if (total < 0) { return 0; }
    if (kind == 0) { return 0; }
    return combi_num.calc(total + kind - 1, kind - 1);
}

long long K, N;

long long pattern_num(const long long sum) {
    if (sum % 2 == 1) {
        long long pair_num = 0;
        for (int i = 1; i <= K; i++) {
            if (sum - i <= K && i < sum - i) {
                pair_num++;
            }
        }
        long long other_num = K - (pair_num * 2);
        long long ret = 0;
        for (long long one_num = 0; one_num <= pair_num; one_num++) {
            long long zero_num = pair_num - one_num;
            long long tmp = (select_num(N - one_num, other_num + one_num) * (combi_num.calc(pair_num, one_num) * pow_mod(2, one_num, MOD) % MOD)) % MOD;
            //std::cout << sum << " " << pair_num << " " << one_num << " " << zero_num << " " << tmp << std::endl;
            ret = (ret + tmp) % MOD;
        }
        return ret;
    } else {
        long long pair_num = 0;
        for (int i = 1; i <= K; i++) {
            if (sum - i <= K && i < sum - i) {
                pair_num++;
            }
        }
        long long other_num = K - (pair_num * 2) - 1;
        long long ret = 0;
        for (long long one_num = 0; one_num <= pair_num; one_num++) {
            long long zero_num = pair_num - one_num;
            long long tmp = (select_num(N - one_num, other_num + one_num) * (combi_num.calc(pair_num, one_num) * pow_mod(2, one_num, MOD) % MOD)) % MOD;
            //std::cout << select_num(N - one_num, other_num + one_num) << " " << combi_num.calc(pair_num, one_num) << " " << pow_mod(2, one_num, MOD) << std::endl;
            ret = (ret + tmp) % MOD;
        }
        for (long long one_num = 0; one_num <= pair_num; one_num++) {
            long long zero_num = pair_num - one_num;
            long long tmp = (select_num(N - 1 - one_num, other_num + one_num) * (combi_num.calc(pair_num, one_num) * pow_mod(2, one_num, MOD) % MOD)) % MOD;
            //std::cout << N - 1 - one_num << " " << other_num + one_num << " " << select_num(N - 1 - one_num, other_num + one_num) << " " << combi_num.calc(pair_num, one_num) << " " << pow_mod(2, one_num, MOD) << std::endl;
            ret = (ret + tmp) % MOD;
        }
        return ret;
    }
}

int main(int argc, char **argv) {
    std::cin >> K >> N;

    for (int i = 2; i <= K * 2; i++) {
        std::cout << pattern_num(i) << std::endl;
    }

    return 0;

    
}

Measured memory_bytes: 640