#dwango2015finals3. [dwango2015_finals_3]ドライブ

[dwango2015_finals_3]ドライブ

问题描述

在Niconico镇上,富有的二丸子住着 NN 个交叉路口,每个交叉路口都有从 11NN 的编号。此外,有 MM 条连接两个交叉路口的道路,每条道路都有从 11MM 的编号。当通过道路 ii 时,可以在 2i2^i 的时间内从交叉路口 AiA_i 到交叉路口 BiB_i 或者从交叉路口 BiB_i 到交叉路口 AiA_i

现在,二丸子打算去兜风。他希望将兜风的路线从交叉路口 11 开始,经过所有的 MM 条道路至少一次,并返回到交叉路口 11。请计算在这样的路线中所需的最小时间。由于答案可能非常大,因此请输出答案对 1,000,000,0071,000,000,007 取模的余数。


输入

输入的格式如下,从标准输入中获取。

NN MM A1A_1 B1B_1 A2A_2 B2B_2 : AMA_M BMB_M

  • 11 行包含两个整数,用空格分隔:N(2N400,000),M(1M500,000)N (2 ≦ N ≦ 400,000), M (1 ≦ M ≦ 500,000),表示Niconico镇中的交叉路口数为 NN,道路数为 MM
  • 接下来的 MM 行描述了道路的信息。其中第 ii 行包含两个整数 Ai,Bi(1AiN,1BiN,AiBi)A_i, B_i (1 ≦ A_i ≦ N, 1 ≦ B_i ≦ N, A_i ≠ B_i),表示道路 ii 连接着交叉路口 AiA_i 和交叉路口 BiB_i。不存在连接同一组交叉路口的多条道路。同时,保证任意一对交叉路口都可以通过一些道路到达。

部分分

此问题有部分分。

  • 如果满足 N2,525N ≦ 2,525M2,525M ≦ 2,525 的数据集1,则获得40分。
  • 如果对所有测试用例求解正确,则额外获得70分。

输出

输出旅行所需的最短时间,将其除以 1,000,000,0071,000,000,007 取模,并输出为一行。末尾要换行。


示例1


4 5
1 2
3 4
2 3
1 3
2 4

示例1输出


70

在这个示例中,Niconico镇具有以下结构。

例如,按照交叉路口的顺序 1,2,3,4,2,3,11,2,3,4,2,3,1,旅行的时间为 21+23+22+25+23+24=702^1 + 2^3 + 2^2 + 2^5 + 2^3 + 2^4 = 70


示例2


6 10
4 6
4 5
3 6
5 2
3 2
1 2
3 4
6 1
2 4
1 3

示例2输出


2132