小 Q 有两棵有根树,一棵叫 $A$,一棵叫 $B$。
这两棵有根树很奇怪:它们不仅有一个特定的结点即根结点,记作 $S_A, S_B$,还有一个特定的结点,姑且叫做“反根结点”,记作 $T_A, T_B$。我们姑且称这样的树(具有“根结点”和“反根结点”的树)叫做“双根树”。(注意,根结点和反根结点可能是同一个结点)
小 Q 想把它们乘起来形成一个新的双根树。这个操作是这样的(注:题面最后有一个形式化描述,以及例子):
- 首先,对于 $A$ 上的每一个点 $a$,都把 $B$ 树复制一份,记作 $B_a$;
- 然后若 $A$ 树上 $x$ 是 $y$ 的父亲,那么就在 $B_y$ 的根结点和 $B_x$ 的反根结点之间连一条边(事实上,后者会成为前者在新树上的父亲);
- 新的树的根结点为 $B_{S_A}$ 的根结点,反根结点为 $B_{T_A}$ 的反根结点。
把这个新的双根树记作 $A \circ B$。容易发现 $A \circ B$ 的结点数等于两棵树的结点数之积。
现在小 Q 有一棵 $n$ 个结点的双根树 $A$,她构造了一棵新的树 $(\dots((A \circ A) \circ A) \dots \circ A) \circ A$(一共是 $k$ 个 $A$),显然这棵树上一共有 $n^k$ 个结点,她想知道所有 $\frac{n^k(n^k-1)}{2}$ 个点对之间的距离之和。由于这个数太大了,你只需要算出它对 $998244353$ 取模后的值即可。
输入格式
第一行四个正整数 $n, k, S, T$,分别表示双根树 $A$ 上的结点数、新的树是由多少个 $A$ 乘起来(即题目描述里的 $k$)以及 $A$ 树上的根结点编号和反根结点编号。
接下来 $n-1$ 行,每行两个数 $x, y$,表示 $A$ 上的一条边。保证给出的是一棵树。
输出格式
一行一个非负整数,表示所有点对间两两距离之和。
样例
样例输入 1
4 1 1 4 1 2 1 3 2 4
样例输出 1
10
样例输入 2
4 2 1 4 1 2 1 3 2 4
样例输出 2
488
样例输入 3, 4
见下发文件。 提示:分别满足第 4, 7 个子任务的性质。
数据范围
| 子任务编号 | $n$ | $k$ | 特殊性质 | 子任务分值 |
|---|---|---|---|---|
| 1 | $\le 100$ | $= 1$ | 无 | 5 |
| 2 | $\le 3000$ | $\le 10$ | 无 | 10 |
| 3 | $\le 10^5$ | $\le 10$ | $n^k \le 10^6$ | 15 |
| 4 | $\le 10^5$ | $\le 1000$ | 无 | 20 |
| 5 | $\le 10^5$ | $\le 10^9$ | $S = T$ | 10 |
| 6 | $\le 10^5$ | $\le 10^9$ | 树是一条链,S 和 T 分别在链两端 | 10 |
| 7 | $\le 10^5$ | $\le 10^9$ | 无 | 30 |
对所有的数据,$1 \le S, T, x, y \le n$。
说明
定义一棵双根树为有两个特殊结点,即根结点 $S$ 与反根结点 $T$ 的树。两棵双根树 $A, B$ 的乘积 $A \circ B$ 定义如下:
- 树 $A \circ B$ 中共有 $n_A n_B$ 个结点($n_A, n_B$ 分别表示两棵树的结点数),以点对 $(i, j)$ 表示,其中 $1 \le i \le n_A, 1 \le j \le n_B$。
- 对于所有 $1 \le u \le n_A, 1 \le v, w \le n_B$,若 $v, w$ 在 $B$ 中相邻,则 $(u, v), (u, w)$ 在 $A \circ B$ 中相邻。
- 对于所有 $1 \le u, v \le n_A$,若 $A$ 中 $u$ 是 $v$ 的父亲(即,$u$ 与 $v$ 相邻,且前者距离 $S_A$ 更近),则 $(u, T_B), (v, S_B)$ 在 $A \circ B$ 中相邻。
- $A \circ B$ 的根结点为 $(S_A, S_B)$,反根结点为 $(T_A, T_B)$。
图 1: 如图,展示了一种情况下 A, B, A ◦ B 三棵树的形态。每棵树的根用倒三角 ▽ 形状表示,反根用 △ 形状表示。