/*~Rainybunny~*/
#include <bits/stdc++.h>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
const int MAXN = 5e3, MOD = 998244353;
int n, m, f[MAXN + 5], fac[MAXN + 5], ifac[MAXN + 5];
inline void subeq( int& a, const int b ) { ( a -= b ) < 0 && ( a += MOD ); }
inline int sub( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline int mul( const long long a, const int b ) { return int( a * b % MOD ); }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline void addeq( int& a, const int b ) { ( a += b ) >= MOD && ( a -= MOD ); }
inline int mpow( int a, int b ) {
int ret = 1;
for ( ; b; a = mul( a, a ), b >>= 1 ) ret = mul( ret, b & 1 ? a : 1 );
return ret;
}
inline void init() {
fac[0] = 1;
rep ( i, 1, n ) fac[i] = mul( i, fac[i - 1] );
ifac[n] = mpow( fac[n], MOD - 2 );
per ( i, n - 1, 0 ) ifac[i] = mul( ifac[i + 1], i + 1 );
}
inline int comb( const int a, const int b ) {
return a < b ? 0 : mul( fac[a], mul( ifac[b], ifac[a - b] ) );
}
int main() {
scanf( "%d %d", &n, &m ), init();
rep ( i, 1, n ) {
int c = n / m;
f[i] = mul( mpow( mul( comb( i, c ), fac[c] ), m - n % m ),
mpow( mul( comb( i, c + 1 ), fac[c + 1] ), n % m ) );
}
rep ( i, 1, n ) {
rep ( j, 1, i - 1 )
subeq( f[i], mul( f[j], mul( comb( i, j ), fac[j] ) ) );
f[i] = mul( f[i], ifac[i] );
printf( "%d\n", f[i] );
}
return 0;
}