给定一张 简单有向图 GG 包含编号为 1,2,3,⋯,n1,2,3,⋯,n 的点。此图包含 mm 条边,编号为 1,2,3,⋯,m1,2,3,⋯,m,其中第 ii(1≤i≤m1≤i≤m)条边为 ui→viui→vi。
定义有向图 G0G0 是一张包含两个编号分别为 1,21,2 的点与一条边 1→21→2 的图。对于整数 kk(k≥1k≥1),定义有向图 GkGk 是将 Gk−1Gk−1 中的每一条边使用 GG 同时替换所得到的图(可见 样例解释 中的参考图)。替换时将 Gk−1Gk−1 中的每一条边的起点视为 GG 中编号为 11 的点,终点视为 GG 中编号为 22 的点。
具体地,对于正整数 kk,按下面的方式构造有向图 GkGk:
一次对 Gk−1Gk−1 中的有向边 u→vu→v 的添加操作如下:
如果你还是不理解这个过程,可以参考 样例解释 的伪代码。
给定图 GG 和非负整数 k′k′,计算 Gk′Gk′ 中的强连通分量的个数。对 10000000071000000007 取模。
本题包含多组测试数据。
首先在第一行输入一个整数 TT(1≤T≤1001≤T≤100)表示测试数据组数。
对于每一组测试数据,输入包含 m+1m+1 行。
第一行包含三个整数 n,m,k′n,m,k′(2≤n≤1052≤n≤105,2≤∑n≤3×1052≤∑n≤3×105,0≤m≤∑m≤1060≤m≤∑m≤106,0≤k′≤10180≤k′≤1018),分别表示 GG 中点与边的数量,以及与计算答案有关的参数。
接下来 mm 行,第 i+1i+1(1≤i≤m1≤i≤m)行包含两个整数 ui,viui,vi(1≤ui,vi≤n1≤ui,vi≤n)表示一条 GG 中的边 ui→viui→vi。
保证输入的点与边构成一张简单有向图。(即无重边与自环)
3
3 3 1919810
1 2
2 3
3 1
5 5 2
1 5
1 3
3 4
4 2
2 3
4 4 5
1 3
2 3
3 4
4 3
1
8
428
在样例的第二组测试数据中,将 G1G1 中的每一条边使用 GG 同时替换的过程如下图所示(其中黑色虚线边表示 G1G1 中的边 u′→v′u′→v′,这条边仅作指示作用,在 G2G2 中不存在,仅一部分图中绘制了黑色虚线边):
答案为 88。
在这里给出伪代码,伪代码以图 GG 和整数 kk 作为输入,返回图 GkGk: