import
java.math.BigInteger;
public
class
GFG {
public
static
final
long
mod =
998244353
;
public
static
final
int
maxn =
3000000
;
public
static
long
[] a =
new
long
[maxn];
public
static
long
[] b =
new
long
[maxn];
public
static
int
nextPowerOf2(
int
n)
{
if
((n & (n -
1
)) ==
0
)
return
n;
return
0x40000000
>> (Integer.numberOfLeadingZeros(n) -
2
);
}
public
static
void
fft(
long
w0,
long
n,
long
[] a)
{
for
(
long
i =
0
, j =
0
; i < n; i++) {
if
(i < j) {
long
temp = a[(
int
)i];
a[(
int
)i] = a[(
int
)j];
a[(
int
)j] = temp;
}
long
bit = n >>
1
;
for
(; (j & bit) !=
0
; bit >>=
1
)
j ^= bit;
j ^= bit;
}
for
(
long
len =
2
; len <= n; len <<=
1
) {
long
wlen = w0;
for
(
long
aux = n; aux > len; aux >>=
1
) {
wlen = wlen * wlen % mod;
}
for
(
long
bat =
0
; bat + len <= n; bat += len) {
for
(
long
i = bat, w =
1
; i < bat + len /
2
;
i++, w = w * wlen % mod) {
long
u = a[(
int
)i],
v
= w * a[(
int
)(i + len /
2
)] % mod;
a[(
int
)i] = (u + v) % mod;
a[(
int
)(i + len /
2
)]
= ((u - v) % mod + mod) % mod;
}
}
}
}
public
static
long
binpow(
long
a,
long
x)
{
long
ans =
1
;
for
(; x !=
0
; x /=
2
, a = a * a % mod) {
if
((x &
1
) !=
0
)
ans = ans * a % mod;
}
return
ans;
}
public
static
long
inv(
long
a)
{
return
binpow(a, mod -
2
);
}
static
void
FindConvolution(
long
[] a,
long
[] b,
int
n,
int
m)
{
int
_n = nextPowerOf2(n + m);
long
w =
15311432
;
for
(
int
aux =
1
<<
23
; aux > _n; aux >>=
1
)
w = w * w % mod;
fft(w, _n, a);
fft(w, _n, b);
for
(
int
i =
0
; i < _n; i++)
a[i] = a[i] * b[i] % mod;
fft(inv(w), _n, a);
for
(
int
i =
0
; i < _n; i++)
a[i] = a[i] * inv(_n) % mod;
for
(
int
i =
0
; i < n + m -
1
; i++)
System.out.print(a[i] +
" "
);
}
public
static
void
main(String[] args)
{
int
N =
4
, M =
5
;
for
(
int
i =
0
; i < N; i++)
a[i] = i +
1
;
for
(
int
i =
0
; i < M; i++)
b[i] =
5
+ i;
FindConvolution(a, b, N, M);
}
}