C. 涂色

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

你有很多颜料,还有一棵树。因此你打算给树上色。

定义 g 为下面这个问题的答案:

对于一棵 n 个节点的树,最开始边全为黑色,现选择一些边染成红色,一种合法的染色方案当且仅当任意一点到 1 的简单路径上有至少一条红边,则 g 表示合法染色方案数量。

先给定一棵 n 个节点的树,很不巧,小 C 只记住了其中 m 条边,现在此基础上补全剩余的 n−1−m 条边,使得 (g mod p) 最大,其中 p 是给定的数。

请注意:你需要最大化 (g mod p) 而非 g。

输入格式

第一行一个正整数 n,m,p。

接下来 m 行,每行两个整数 (u,v),描述已知树上的边。

变量含义如题所示,保证存在至少一棵合法的树使得同时拥有这 m 条边。

输出格式

一行一个正整数,表示答案。

样例

样例输入 #1

3 2 1000
1 2
1 3

样例输出 #1

1

样例输入 #2

10000 10 1024
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11

样例输出 #2

512

数据范围与提示

对于 50% 的数据,m=n−1,p=998244353。

对于另外 50% 的数据,没有特殊限制。

对于 100% 的数据, 1≤n≤10^6,0≤m<n,1≤p≤10^9

样例解释1

你获得了一棵完整的树。

为了满足题目的限制,你必须把两条边都染成红色。

因此只有一种方法。

样例解释2

我想到了一个绝妙的样例解释,可惜字数限制太少我写不下::>_<::

大家自己思考为什么答案是这个吧!