#P50004. 闭合子图

闭合子图

题目描述

给定有向图 G=(V,E)G = (V,E),其中 VV 为点集,EE 为边集。设 GG 包含 nn 个结点,用正整数 1,2,,n1,2,··· ,n 表示,即 V={1,2,,n}V = \{1,2,··· ,n\}

对于 VV 的任意非空子集 SVS\subseteq V,如果 SS 中任意点的任意后继均属于 SS,即对任意 uSu \in Suu 的出边 (u,v)E(u,v) \in E 均满足 vSv \in S,则称 SSGG 的一个闭合子图

你的任务是,求出有多少个 GG非空闭合子图 SS,满足 SS 中的点编号是连续的。连续的定义:对任意整数 i<k<ji < k < j,若 i,jSi, j \in S,则 kSk \in S

输入格式

第一行两个整数 n,mn,m,表示图 GG 的结点数和边数。

接下来 mm 行,每行两个正整数 uiu_i ,viv_i ,表示有一条从点 uiu_i 到点 viv_i 的边 (ui,vi)E(u_i ,v_i ) \in E

GG 可能包含重边和自环。

输出格式

输出共一行,包含一个整数,表示所求的闭合子图的个数。

由于答案可能很大所以这里要求输出答案对 109+710^9+7 取模的结果

样例输入与输出

5 5
1 3
3 4
5 4
1 5
2 1
5
见附件: graph2.in
见附件: graph2.out

数据规模与约定