连通染色 - 代码源竞赛平台

题目描述

蜗蜗得到一棵有 NN 个节点的树,节点编号为 11 到 NN。他准备将每个节点染成黑色或白色。

一种染色方案是合法的,当且仅当所有黑色节点构成一个非空连通块。也就是说,任意两个黑色节点之间的简单路径上不能出现白色节点。

对于每个节点 vv,请你分别求出将节点 vv 染成黑色的合法方案数量。两个方案只要有一个节点的颜色不同,就视为不同的方案。答案对给定的整数 MM 取模。

输入格式

第一行包含两个整数 NN 和 MM,分别表示节点数量和模数。

接下来 N−1N-1 行,每行包含两个整数 xix_i 和 yiy_i,表示节点 xix_i 与节点 yiy_i 之间有一条无向边。

输出格式

输出 NN 行,每行一个整数。第 vv 行表示节点 vv 为黑色时,合法染色方案的数量对 MM 取模的结果。

样例

2 6
1 2
2
2

样例解释

当节点 11 必须为黑色时,可以只将节点 11 染成黑色,也可以将两个节点都染成黑色,共有 22 种合法方案。

当节点 22 必须为黑色时,同样有 22 种合法方案。

数据范围

对于 100% 的数据,保证 1≤N≤1051\le N\le 10^5,2≤M≤1092\le M\le 10^9,1≤xi,yi≤N1\le x_i,y_i\le N。

输入的边构成一棵树,MM 不一定是质数。