树上赋权
题号:NC247917
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

给出一棵 n 个点以 1 为根的树,你需要给每个点赋上一个权值 01,使得 子树中所有点的权值全为 1 的子树数量 与 子树中所有点的权值全为 0 的子树数量 相等。

若无解输出 “NO”。若有多组符合条件的赋权方式输出任意一种即可。

输入描述:

第一行一个数 n

接下来 n-1 行,每行两个正整数 x,y 表示树上点 x 与点 y 之间连有一条边。

数据保证

输出描述:

若无解输出 “NO”。

反之输出两行,第一行一个字符串 "YES"(均不含引号),接下来一行 n 个整数描述了你给每个点赋的权值,其中第 i 个整数为点 i 的权值。
示例1

输入

复制
5
1 2
2 3
1 4
4 5

输出

复制
YES
0 1 0 0 1
示例2

输入

复制
2
1 2

输出

复制
NO