#CF2135C. 按照任务规定
按照任务规定
对于一个由 个顶点组成的无向连通图,其中第 个顶点的权重为 ,我们定义一条简单路径 的值为:
$$v_{l_1} \oplus v_{l_2} \oplus \dots \oplus v_{l_m} $$(其中 表示按位异或运算)。
我们称该图是平衡的,当且仅当:
- 对于任意 ,从 到 的所有简单路径的值都相等。
Aquawave 给了你一个由 个顶点和 条边组成的无向连通图,图中第 个顶点的权重为 。然而,其中一些权重缺失了,用 表示。
Aquawave 希望为每个 的顶点赋一个介于 到 之间的整数权重,使得该图变为平衡的。
你需要帮助 Aquawave 计算出有多少种赋值方式可以达到目标,结果对 取模。
输入格式
每个测试点包含多个测试用例。第一行包含一个整数 (),表示测试用例的数量。
接下来是每个测试用例的描述:
- 第一行包含三个整数 (,$n-1 \leq m \leq \min\left(\frac{n(n-1)}{2}, 4 \times 10^5\right)$,),分别表示顶点数、边数和权重的上界。
- 第二行包含 个整数 (),表示顶点的权重。其中 表示该顶点的权重缺失。
- 接下来 行,每行包含两个整数 (),表示一条连接顶点 和 的边。
输入保证给出的图是简单且连通的。
输入保证所有测试用例的 之和不超过 ,所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出一个整数,表示使得图平衡的赋值方式数量,对 取模。
示例
输入
5
4 4 4
-1 -1 -1 -1
1 2
2 3
1 3
4 3
5 6 7
2 2 -1 2 2
1 2
1 3
1 4
2 5
3 5
4 5
7 8 9
-1 -1 -1 -1 0 -1 0
1 2
2 3
3 4
1 4
1 5
5 6
7 6
7 5
5 8 1000000000
1 2 3 4 -1
1 2
3 2
3 5
5 1
2 4
4 3
2 5
1 4
5 4 1000000000
-1 2 -1 3 -1
1 2
1 3
2 4
2 5
输出
4
1
9
0
747068572
样例说明
第一个测试用例:共有 种可能的赋值方式:
可以证明这些赋值都能使图平衡。
第二个测试用例:取 ,简单路径 的值为 ,简单路径 的值为 ,因此 只能为 。可以证明 能使图平衡。
第五个测试用例:给出的图是一棵树,因此任意两点之间只有一条简单路径。我们可以为每个 任意赋 到 之间的值,答案为 。