#8177. 「省选联考 2024」虫洞 NOI/NOI+/CTSC

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

题目描述

E 国有 个城市,编号为 。为了让城市之间的来往更加便利,E 国的交通部想在 个城市间建造一些虫洞。每条虫洞是一条单向的从某个城市到另一个城市的通道。允许通道的起点和终点是同一个城市,也允许两个城市之间有多个虫洞连接。

为了区分虫洞的建造时间,交通部给每一条虫洞一个正整数的编号。

我们称一种虫洞的建造方案是好的,若它满足如下四个条件:

  1. 存在一个非负整数 使得每个城市恰好是 条虫洞的起点,也恰好是 条虫洞的终点。
  2. 对于每个城市而言,在以它为起点的虫洞的编号中, 恰好各出现一次。
  3. 对于每个城市而言,在以它为终点的虫洞的编号中, 恰好各出现一次。
  4. 任意选取一个城市 和正整数 。设从 出发,先经过一次编号为 的虫洞,再经过一次编号为 的虫洞,到达城市 。设从 出发,先经过一次编号为 的虫洞,再经过一次编号为 的虫洞,到达城市 。则条件 必定满足。

特别地,不建造任何虫洞的方案也是好的。

现在,建造师已建造了 条虫洞,且给了它们 的编号,此时这样的建造方案是好的。他想要新建造 条虫洞,并给它们 的编号。他必须保证这 条虫洞形成的建造方案仍然是好的。他想知道有多少种新建造 条虫洞的方法,使得这 条虫洞形成的建造方案是好的。

由于答案很大,你只需要求出方案数除以 的余数。

输入格式

输入的第一行四个非负整数 ,其中 表示测试点编号。样例中的 表示该样例的数据范围与第 个测试点的数据范围相同。

接下来 行,每行三个正整数 ,表示一条编号为 的,起点为 号城市,终点为 号城市的虫洞。

输出格式

输出一行整数,表示方案数除以 的余数。

样例

样例输入 1

1 4 1 1
1 2 1
2 1 1
3 4 1
4 3 1

样例输出 1

8

数据范围与提示

【样例 1 解释】

在该组样例中,已经建造的编号为 的虫洞为 。为了使 条虫洞形成的建造方案是好的,新建造的编号为 的虫洞可能有 种情形:

【样例 2】

见附件中的 wormhole2.in/ans

该样例的 ,它满足第 2 个测试点的限制条件。

【样例 3】

见附件中的 wormhole3.in/ans

该样例的 ,它满足第 5 个测试点的限制条件。

【样例 4】

见附件中的 wormhole4.in/ans

该样例的 ,它满足第 7 个测试点的限制条件。

【样例 5】

见附件中的 wormhole5.in/ans

该样例的 ,它满足第 9 个测试点的限制条件。

【样例 6】

见附件中的 wormhole6.in/ans

该样例的 ,它满足第 11 个测试点的限制条件。

【样例 7】

见附件中的 wormhole7.in/ans

该样例的 ,它满足第 15 个测试点的限制条件。

【样例 8】

见附件中的 wormhole8.in/ans

该样例的 ,它满足第 17 个测试点的限制条件。

【样例 9】

见附件中的 wormhole9.in/ans

该样例的 ,它满足第 20 个测试点的限制条件。

【样例 10】

见附件中的 wormhole10.in/ans

该样例的 ,它满足第 22 个测试点的限制条件。

【子任务】

对于所有测试点,

  • 保证初始建造的 条虫洞构成一个号的建造方案。
测试点编号

【提示】

本题部分测试点输入规模较大,我们推荐你使用较为快速的读入方式。