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$