#425. 最大半连通子图

最大半连通子图

题目描述

原题来自:ZJOI 2007

一个有向图G=(V,E)\red{ G=(V,E) }称为半连通的 (Semi-Connected) ,如果满足:u,vV\red{\forall u,v\in V},满足uv\red{ u→v}vu\red{v→u},即对于图中任意两点 u,v\red{u,v},存在一条 u\red{u}v\red{v} 的有向路径或者从v\red{ v}u\red{u} 的有向路径。

G=(V,E)\red{G’=(V’,E’)} 满足,E\red{E’}E\red{ E} 中所有和V\red{V’ }有关的边,则称G\red{ G’ }G\red{ G} 的一个导出子图。若G\red{ G’ }G\red{ G }的导出子图,且 G\red{G’ }半连通,则称G\red{ G’}G\red{ G} 的半连通子图。若 G\red{G’ }G\red{G }所有半连通子图中包含节点数最多的,则称G\red{ G’ }G\red{ G }的最大半连通子图。

给定一个有向图G\red{ G},请求出 G\red{G} 的最大半连通子图拥有的节点数 K\red{K},以及不同的最大半连通子图的数目 C\red{C}。由于 C\red{C }可能比较大,仅要求输出C\red{ C }X\red{X} 的余数。

输入格式

第一行包含三个整数 N,M,X\red{N,M,X}N,M\red{N,M }分别表示图G\red{G }的点数与边数,X\red{X} 的意义如上文所述; 接下来M\red{ M} 行,每行两个正整数 a,b\red{a,b},表示一条有向边(a,b)\red{ (a,b)}

图中的每个点将编号为 1,2,3,,N\red{1,2,3,⋯,N},保证输入中同一个(a,b)\red{ (a,b) }不会出现两次。

输出格式

应包含两行。第一行包含一个整数K\red{ K},第二行包含整数 CmodX\red{C \bmod X}

样例

输入样例

6 6 20070603
1 2
2 1
1 3
2 4
5 6
6 4

输出样例

3
3

提示

对于 20%\red{20\%} 的数据,N18\red{N \le 18}; 对于60%\red{ 60\%} 的数据,N104\red{N \le 10^4}; 对于100%\red{ 100\% }的数据,1N105,1M106,X108\red{1\le N \le 10^5,1\le M \le 10^6,X\le 10^8}