#1416. 【模板】DAG的拓扑排序方案计数(状压DP)

【模板】DAG的拓扑排序方案计数(状压DP)

题目描述

给定一张包含 nn 个点、mm 条有向边的有向无环图(DAGDAG),点从 11nn 编号。
定义“拓扑排序”为将所有点排成一个序列,使得对于每条有向边 (uv)(u \to v),在序列中 uu 必须出现在 vv 之前。

请计算该图不同拓扑排序的数量,答案对 109+710^9 + 7 取模。


输入格式

  • 第一行两个整数 n,mn,m
  • 接下来 mm 行,每行两个整数 u,vu,v,表示一条有向边 uvu \to v

输出格式

输出一个整数,表示拓扑排序方案数对 109+710^9 + 7 取模的结果。


输入输出样例

输入 #1

3 2
1 2
1 3

输出 #1

2

解释:
可行的拓扑序为 [1,2,3][1,2,3][1,3,2][1,3,2]

输入 #2

10 17
4 1
1 2
5 1
5 10
7 4
5 3
6 3
6 8
10 2
4 2
6 9
7 10
10 8
6 5
3 10
7 9
1 8

输出 #2

450

数据范围

  • 1n201 \le n \le 20
  • 0mn(n1)20 \le m \le \frac{n(n-1)}{2}
  • 保证点编号在 [1,n][1,n]

子任务

子任务编号 分值 限制
1 10 n10n \le 10
2 30 n16n \le 16
3 60 n20n \le 20