import sys

input = sys.stdin.readline

from collections import deque



nn = 200200

mod = 10**9+7



fa = [1] * (nn+1)

fainv = [1] * (nn+1)

for i in range(nn):

    fa[i+1] = fa[i] * (i+1) % mod

fainv[-1] = pow(fa[-1], mod-2, mod)

for i in range(nn)[::-1]:

    fainv[i] = fainv[i+1] * (i+1) % mod



inv = lambda i: fainv[i] * fa[i-1] % mod



N, mod = list(map(int, input().split()))

X = [[] for i in range(N)]

for i in range(N-1):

    x, y = list(map(int, input().split()))

    X[x-1].append(y-1)

    X[y-1].append(x-1)



P = [-1] * N

Q = deque([0])

R = []

while Q:

    i = deque.popleft(Q)

    R.append(i)

    for a in X[i]:

        if a != P[i]:

            P[a] = i

            X[a].remove(i)

            deque.append(Q, a)



##### Settings

unit = 1

td_unit = 1

merge = lambda a, b: a * b % mod

adj_bu = lambda a, i=-1: a + 1

adj_td = lambda a, i=-1: a + 1

calc = lambda i: merge(BU[i]-1, TD[i])

#####



SI = [1] * N

for i in R[1:][::-1]:

    SI[P[i]] += SI[i]



BU = [unit] * N

TD = [td_unit] * N

for i in R[1:][::-1]:

    BU[i] = adj_bu(BU[i], i)

    p = P[i]

    BU[p] = merge(BU[p], BU[i])

BU[R[0]] = adj_bu(BU[R[0]], R[0])



AX = [0] * N

for i in R:

    ac = unit

    for j in X[i]:

        AX[j] = ac

        ac = merge(ac, BU[j])

    ac = unit

    for j in X[i][::-1]:

        AX[j] = merge(AX[j], ac)

        TD[j] = adj_td(merge(merge(unit, TD[i]), AX[j]), j)

        ac = merge(ac, BU[j])



ANS = [calc(i) for i in range(N)]

print((*ANS))
import sys

input = sys.stdin.readline

from collections import deque

 

N, M = map(int, input().split())

X = [[] for i in range(N)]

for i in range(N-1):

    x, y = map(int, input().split())

    X[x-1].append(y-1)

    X[y-1].append(x-1)



P = [-1] * N

Q = deque([0])

R = []

while Q:

    i = deque.popleft(Q)

    R.append(i)

    for a in X[i]:

        if a != P[i]:

            P[a] = i

            X[a].remove(i)

            deque.append(Q, a)



##### Settings

unit = 1

merge = lambda a, b: a * b % M

adj_bu = lambda a, i: a + 1

adj_td = lambda a, i: a + 1

#####



ME = [unit] * N

XX = [0] * N

TD = [unit] * N

for i in R[1:][::-1]:

    XX[i] = adj_bu(ME[i], i)

    p = P[i]

    ME[p] = merge(ME[p], XX[i])

XX[R[0]] = adj_bu(ME[R[0]], R[0])



for i in R:

    ac = TD[i]

    for j in X[i]:

        TD[j] = ac

        ac = merge(ac, XX[j])

    ac = unit

    for j in X[i][::-1]:

        TD[j] = adj_td(merge(TD[j], ac), i)

        ac = merge(ac, XX[j])

        XX[j] = adj_bu(merge(ME[j], TD[j]), j)



print(*[x - 1 for x in XX], sep = "\n")

import sys

input = sys.stdin.readline
from collections import deque

nn = 200200
mod = 10**9 + 7
fa = [1] * (nn + 1)
fainv = [1] * (nn + 1)
for i in range(nn):
    fa[i + 1] = fa[i] * (i + 1) % mod
fainv[-1] = pow(fa[-1], mod - 2, mod)
for i in range(nn)[::-1]:
    fainv[i] = fainv[i + 1] * (i + 1) % mod
inv = lambda i: fainv[i] * fa[i - 1] % mod
N, mod = list(map(int, input().split()))
X = [[] for i in range(N)]
for i in range(N - 1):
    x, y = list(map(int, input().split()))
    X[x - 1].append(y - 1)
    X[y - 1].append(x - 1)
P = [-1] * N
Q = deque([0])
R = []
while Q:
    i = deque.popleft(Q)
    R.append(i)
    for a in X[i]:
        if a != P[i]:
            P[a] = i
            X[a].remove(i)
            deque.append(Q, a)
##### Settings
unit = 1
td_unit = 1
merge = lambda a, b: a * b % mod
adj_bu = lambda a, i=-1: a + 1
adj_td = lambda a, i=-1: a + 1
calc = lambda i: merge(BU[i] - 1, TD[i])
#####
SI = [1] * N
for i in R[1:][::-1]:
    SI[P[i]] += SI[i]
BU = [unit] * N
TD = [td_unit] * N
for i in R[1:][::-1]:
    BU[i] = adj_bu(BU[i], i)
    p = P[i]
    BU[p] = merge(BU[p], BU[i])
BU[R[0]] = adj_bu(BU[R[0]], R[0])
AX = [0] * N
for i in R:
    ac = unit
    for j in X[i]:
        AX[j] = ac
        ac = merge(ac, BU[j])
    ac = unit
    for j in X[i][::-1]:
        AX[j] = merge(AX[j], ac)
        TD[j] = adj_td(merge(merge(unit, TD[i]), AX[j]), j)
        ac = merge(ac, BU[j])
ANS = [calc(i) for i in range(N)]
print((*ANS))

import sys

input = sys.stdin.readline
from collections import deque

N, M = map(int, input().split())
X = [[] for i in range(N)]
for i in range(N - 1):
    x, y = map(int, input().split())
    X[x - 1].append(y - 1)
    X[y - 1].append(x - 1)
P = [-1] * N
Q = deque([0])
R = []
while Q:
    i = deque.popleft(Q)
    R.append(i)
    for a in X[i]:
        if a != P[i]:
            P[a] = i
            X[a].remove(i)
            deque.append(Q, a)
##### Settings
unit = 1
merge = lambda a, b: a * b % M
adj_bu = lambda a, i: a + 1
adj_td = lambda a, i: a + 1
#####
ME = [unit] * N
XX = [0] * N
TD = [unit] * N
for i in R[1:][::-1]:
    XX[i] = adj_bu(ME[i], i)
    p = P[i]
    ME[p] = merge(ME[p], XX[i])
XX[R[0]] = adj_bu(ME[R[0]], R[0])
for i in R:
    ac = TD[i]
    for j in X[i]:
        TD[j] = ac
        ac = merge(ac, XX[j])
    ac = unit
    for j in X[i][::-1]:
        TD[j] = adj_td(merge(TD[j], ac), i)
        ac = merge(ac, XX[j])
        XX[j] = adj_bu(merge(ME[j], TD[j]), j)
print(*[x - 1 for x in XX], sep="\n")

-nn = 200200 -mod = 10**9 + 7 -fa = [1] * (nn + 1) -fainv = [1] * (nn + 1) -for i in range(nn): -    fa[i + 1] = fa[i] * (i + 1) % mod -fainv[-1] = pow(fa[-1], mod - 2, mod) -for i in range(nn)[::-1]: -    fainv[i] = fainv[i + 1] * (i + 1) % mod -inv = lambda i: fainv[i] * fa[i - 1] % mod -N, mod = list(map(int, input().split())) +N, M = map(int, input().split()) -    x, y = list(map(int, input().split())) +    x, y = map(int, input().split()) -td_unit = 1 -merge = lambda a, b: a * b % mod -adj_bu = lambda a, i=-1: a + 1 -adj_td = lambda a, i=-1: a + 1 -calc = lambda i: merge(BU[i] - 1, TD[i]) +merge = lambda a, b: a * b % M +adj_bu = lambda a, i: a + 1 +adj_td = lambda a, i: a + 1 -SI = [1] * N +ME = [unit] * N +XX = [0] * N +TD = [unit] * N -    SI[P[i]] += SI[i] -BU = [unit] * N -TD = [td_unit] * N -for i in R[1:][::-1]: -    BU[i] = adj_bu(BU[i], i) +    XX[i] = adj_bu(ME[i], i) -    BU[p] = merge(BU[p], BU[i]) -BU[R[0]] = adj_bu(BU[R[0]], R[0]) -AX = [0] * N +    ME[p] = merge(ME[p], XX[i]) +XX[R[0]] = adj_bu(ME[R[0]], R[0]) -    ac = unit +    ac = TD[i] -        AX[j] = ac -        ac = merge(ac, BU[j]) +        TD[j] = ac +        ac = merge(ac, XX[j]) -        AX[j] = merge(AX[j], ac) -        TD[j] = adj_td(merge(merge(unit, TD[i]), AX[j]), j) -        ac = merge(ac, BU[j]) -ANS = [calc(i) for i in range(N)] -print((*ANS)) +        TD[j] = adj_td(merge(TD[j], ac), i) +        ac = merge(ac, XX[j]) +        XX[j] = adj_bu(merge(ME[j], TD[j]), j) +print(*[x - 1 for x in XX], sep="\n")