from
itertools
import
accumulate
def
add_loop(m, loop_ans, si, k, b):
if
k <
=
0
:
return
loop_rem
=
m
-
si
if
k <
=
loop_rem:
loop_ans[si]
+
=
b
loop_ans[si
+
k]
-
=
b
return
loop_ans[si]
+
=
b
loop_ans[m]
-
=
b
entire_loop, last_loop
=
divmod
(k
-
loop_rem, m)
loop_ans[
0
]
+
=
b
*
(entire_loop
+
1
)
loop_ans[m]
-
=
b
*
entire_loop
loop_ans[last_loop]
-
=
b
def
solve(loop):
m
=
len
(loop)
loop_ans
=
[
0
]
*
(m
+
1
)
for
li
in
range
(m):
u
=
loop[li]
nxt_i
=
(li
+
1
)
%
m
prev_in_loop
=
loop[(li
-
1
)
%
m]
add_loop(m, loop_ans, nxt_i, k, bbb[loop[li]])
path
=
[u]
while
path:
v
=
path[
-
1
]
if
progress[v]
=
=
len
(prev[v]):
if
v !
=
u:
b
=
bbb[v]
ans[aaa[v]]
+
=
b
if
len
(path) > k
+
1
:
ans[path[
-
k
-
2
]]
-
=
b
else
:
add_loop(m, loop_ans, nxt_i, k
-
len
(path)
+
1
, b)
ans[v]
%
=
MOD
ans[aaa[v]]
+
=
ans[v]
path.pop()
else
:
w
=
prev[v][progress[v]]
progress[v]
+
=
1
if
w
=
=
prev_in_loop:
continue
path.append(w)
loop_ans
=
list
(accumulate(loop_ans))
for
li, v
in
enumerate
(loop):
ans[v]
+
=
loop_ans[li]
ans[v]
%
=
MOD
n, k
=
map
(
int
,
input
().split())
aaa
=
list
(
map
(
int
,
input
().split()))
aaa
=
[a
-
1
for
a
in
aaa]
bbb
=
list
(
map
(
int
,
input
().split()))
MOD
=
998244353
prev
=
[[]
for
_
in
range
(n)]
for
i, a
in
enumerate
(aaa):
prev[a].append(i)
checked
=
[
False
]
*
n
progress
=
[
0
]
*
n
ans
=
[
0
]
*
n
for
s
in
range
(n):
if
checked[s]:
continue
path
=
[]
v
=
s
while
checked[v]
=
=
False
:
checked[v]
=
True
path.append(v)
v
=
aaa[v]
try
:
loop_start
=
path.index(v)
except
:
continue
loop
=
path[loop_start:]
solve(loop)
inv_k
=
pow
(k, MOD
-
2
, MOD)
ans
=
[a
*
inv_k
%
MOD
for
a
in
ans]
print
(
*
ans)