题目描述
E 国有 n 个城市,编号为 1 至 n。为了让城市之间的来往更加便利,E 国的交通部想在 n 个城市间建造一些虫洞。每条虫洞是一条单向的从某个城市到另一个城市的通道。允许通道的起点和终点是同一个城市,也允许两个城市之间有多个虫洞连接。
为了区分虫洞的建造时间,交通部给每一条虫洞一个正整数的编号。
我们称一种虫洞的建造方案是好的,若它满足如下四个条件:
- 存在一个非负整数 d 使得每个城市恰好是 d 条虫洞的起点,也恰好是 d 条虫洞的终点。
- 对于每个城市而言,在以它为起点的虫洞的编号中,1 到 d 恰好各出现一次。
- 对于每个城市而言,在以它为终点的虫洞的编号中,1 到 d 恰好各出现一次。
- 任意选取一个城市 u 和正整数 1≤j1,j2≤d。设从 u 出发,先经过一次编号为 j1 的虫洞,再经过一次编号为 j2 的虫洞,到达城市 v1。设从 u 出发,先经过一次编号为 j2 的虫洞,再经过一次编号为 j1 的虫洞,到达城市 v2。则条件 v1=v2 必定满足。
特别地,不建造任何虫洞的方案也是好的。
现在,建造师已建造了 mn 条虫洞,且给了它们 1∼m 的编号,此时这样的建造方案是好的。他想要新建造 kn 条虫洞,并给它们 (m+1)∼(m+k) 的编号。他必须保证这 (m+k)n 条虫洞形成的建造方案仍然是好的。他想知道有多少种新建造 kn 条虫洞的方法,使得这 (m+k)n 条虫洞形成的建造方案是好的。
由于答案很大,你只需要求出方案数除以 998244353 的余数。
输入格式
输入的第一行四个非负整数 c,n,m,k,其中 c 表示测试点编号。样例中的 c 表示该样例的数据范围与第 c 个测试点的数据范围相同。
接下来 nm 行,每行三个正整数 u,v,w,表示一条编号为 w 的,起点为 u 号城市,终点为 v 号城市的虫洞。
输出格式
输出一行整数,表示方案数除以 998244353 的余数。
样例
1 4 1 1
1 2 1
2 1 1
3 4 1
4 3 1
8
提示
【样例 1 解释】
在该组样例中,已经建造的编号为 1 的虫洞为 1→2,2→1,3→4,4→3。为了使 8 条虫洞形成的建造方案是好的,新建造的编号为 2 的虫洞可能有 8 种情形:
- 1→1,2→2,3→3,4→4
- 1→1,2→2,3→4,4→3
- 1→2,2→1,3→3,4→4
- 1→2,2→1,3→4,4→3
- 1→3,2→4,3→1,4→2
- 1→3,2→4,3→2,4→1
- 1→4,2→3,3→1,4→2
- 1→4,2→3,3→2,4→1
【样例 2】
见附件中的 wormhole2.in/ans
。
该样例的 c=2,它满足第 2 个测试点的限制条件。
【样例 3】
见附件中的 wormhole3.in/ans
。
该样例的 c=5,它满足第 5 个测试点的限制条件。
【样例 4】
见附件中的 wormhole4.in/ans
。
该样例的 c=7,它满足第 7 个测试点的限制条件。
【样例 5】
见附件中的 wormhole5.in/ans
。
该样例的 c=9,它满足第 9 个测试点的限制条件。
【样例 6】
见附件中的 wormhole6.in/ans
。
该样例的 c=11,它满足第 11 个测试点的限制条件。
【样例 7】
见附件中的 wormhole7.in/ans
。
该样例的 c=15,它满足第 15 个测试点的限制条件。
【样例 8】
见附件中的 wormhole8.in/ans
。
该样例的 c=17,它满足第 17 个测试点的限制条件。
【样例 9】
见附件中的 wormhole9.in/ans
。
该样例的 c=20,它满足第 20 个测试点的限制条件。
【样例 10】
见附件中的 wormhole10.in/ans
。
该样例的 c=22,它满足第 22 个测试点的限制条件。
【子任务】
对于所有测试点,
- 1≤n≤2⋅103,0≤m≤103,1≤k≤1015;
- 1≤u,v≤n,1≤w≤m;
- 保证初始建造的 mn 条虫洞构成一个号的建造方案。
测试点编号 |
n |
m |
k |
1∼4 |
≤5 |
≤3 |
≤3 |
5∼6 |
≤2⋅103 |
=0 |
=1 |
7∼8 |
≤102 |
=1 |
9∼10 |
≤10 |
11∼14 |
≤103 |
15∼16 |
=0 |
≤1015 |
17∼19 |
≤10 |
20∼21 |
≤2⋅103 |
≤103 |
≤102 |
22∼25 |
≤1015 |
【提示】
本题部分测试点输入规模较大,我们推荐你使用较为快速的读入方式。