from collections import * from itertools import * from functools import * import math,sys input = sys.stdin.readline def convolution(f,g,mod): def _convolution(f,g,_mod): n = len(bin(len(f)+len(g)-1)) - 2 fft_length = 1<>k)&1) << (n - 1 - k) if i>k)&1) << (n - 1 - k) if ip: break if _p%j==0: if j**2!=_p: pp.append(j) pp.append(_p//j) #2から順に原始根になるか計算 for i in range(2,p): if all(pow(i,s,p)!=1 for s in pp): p_root = i break #R[i] = (p_root)**i R = [1]*(p) for i in range(1,p): R[i] = p_root*R[i-1]%p R_inv = {r:i for i,r in enumerate(R)} F = [0]*p G = [0]*p for i in range(p-1): gg = g[i] ff = f[i] G[R_inv[i+1]] = gg F[R_inv[i+1]] = ff h = convolution(F,G,mod) H = [0]*p # print(h) for i in range(len(h)): hh = h[i] idx = ((i-1)%(p-1))+1 ridx = R[idx] H[ridx] = (H[ridx] + hh)%mod return H p = int(input()) A = list(map(int,input().split())) B = list(map(int,input().split())) mod = 998244353 H = mul_convolution(A,B,p,mod) print(*H[1:])