小红的转账设置方式
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红有n张银行卡,其中的某些银行卡之间可以互相转账(只能单向转)。但是有些银行卡则不能转账。
由于转账是单向的,对于可以转账的银行卡,小红可以设置转账的方向。如果a银行卡和b银行卡可以互相转账,那么小红可以设置成a银行卡向b银行卡转账。当设置结束后,b银行卡就无法向a银行卡转账了。也就是说,设置完结束后,对于ab这一对银行卡,a只能作为转账方,b只能作为收账方。
为了用钱方便,小红希望设置转账的方向后,所有银行卡的钱有一种方式可以转入1号银行卡。定义每张银行卡的代价为该银行卡转入1号银行卡的最少转账次数。现希望所有银行卡的代价之和尽可能小,小红想知道,有多少种不同的转账设置方案?答案请对10^9+7取模。

输入描述:

第一行输入两个正整数nm,代表银行卡数量以及可以互相转账的银行卡对数。
接下来的m行,每行输入两个正整数uv,代表u号银行卡和v号银行卡之前可以设置转账方向。
1\le n,m \le 200000
1\le u,v \le n 且 u\ne v
保证任意两个银行卡之间最多一种直接转账方式。
保证至少存在一种方案使得所有卡都可以转入1号银行卡。

输出描述:

输出两个正整数valcnt,分别代表最小的代价之和、以及能达到这个最小和的方案数。
答案请对10^9+7取模(代价之和、方案数都需要取模再输出)。
示例1

输入

复制
4 4
1 2
1 3
2 4
3 4

输出

复制
4 3

说明

最小的代价之和是4,有以下方案:
方案1:转账方向设置为,2号->1号,3号->1号,4号->2号,4->3号。1号银行卡的代价是0,2号银行卡的代价是1,3号银行卡的代价是1,4号银行卡的代价是2。
方案2:转账方向设置为,2号->1号,3号->1号,4号->2号,3->4号。1号银行卡的代价是0,2号银行卡的代价是1,3号银行卡的代价是1,4号银行卡的代价是2。
方案3:转账方向设置为,2号->1号,3号->1号,2号->4号,4->3号。1号银行卡的代价是0,2号银行卡的代价是1,3号银行卡的代价是1,4号银行卡的代价是2。
其它方案的代价之和都大于4。