SP32222 ADAPANEL - Ada and Panels
题目描述
瓢虫艾达成功地解决了一些难题,因此一家建筑公司要求她为他们解决一个问题。这个国家有多个城市,每个城市只有一个面板块(我也不知道这是啥东西,凑合看吧)。一些城市之间有单向道路(请注意,允许有环形道路和连通的道路)。一个城市可以将其面板块出售给任何城市,他们可以将面板块运输到该城市,并从该城市带回他们的奖励(即必须有一条从实际城市到目的城市再返回的路径)。只要一个城市有 $K$ 个面板块,它就会建造一个高度为 $K$ 的预制板。
建筑公司记下所有的高度,并将它们排列成一个数组。他们想知道,通过在城市之间移动面板块,可以实现多少不同的阵列。然而,你需要注意一点:考虑一组城市,其中每个城市都可以通过其他城市到达。我们可以在这样一组城市之间移动面板块,然后就能创建具有相同高度的新排列。建筑公司**不会**计算此类情况,他们只会考虑一组城市不同高度的排列。
因为你成功地帮助了艾达解决了一些棘手的问题,所以她要求你帮助她。你的工作是计算可能出现的排列的数量。由于这个数字可能非常大,您必须输出这个数字**模 $10^9+7$** 的值。
输入格式
第一行包含两个整数 $N,M$ ,以及城市数量和城市之间的单向道路数量。
接下来的 $M$ 行包含两个整数 $a、b$ ,表示从 $a$ 市到 $b$ 市的道路。
输出格式
只有一行可能的排列数模 $10^9+7$ 的值。
## 输入输出样例
### 样例输入 #1
```
7 9
0 1
1 2
2 3
3 1
2 0
4 5
5 4
6 4
5 6
```
### 样例输出 #1
```
15
```
### 样例输入 #2
```
7 7
0 1
1 2
2 3
3 4
4 5
5 6
6 0
```
### 样例输出 #2
```
15
```
### 样例输入 #3
```
6 3
0 1
3 2
4 5
```
### 样例输出 #3
```
1
```
说明/提示
$1 ≤ N, M ≤ 2*10^5$
$0 ≤ a, b < N$