#U2021FP3. Counting Graphs

Counting Graphs

Bessie has a connected, undirected graph GG with NN vertices labeled 1N1…N and MM edges (2N102**,N1MN2**+N22≤N≤102,N−1≤M≤N2+N2). GG may contain self-loops (edges from nodes back to themselves), but no parallel edges (multiple edges connecting the same endpoints).Let fG**(a,b)fG(a,b) be a boolean function that evaluates to true if there exists a path from vertex 11 to vertex aa that traverses exactly bb edges for each 1aN1≤a≤N and 0b**0≤b, and false otherwise. If an edge is traversed multiple times, it is included that many times in the count.

Elsie wants to copy Bessie. In particular, she wants to construct an undirected graph G′G′ such that fG**′(a,b)=fG**(a,b)fG′(a,b)=fG(a,b) for all aa and bb.

Your job is to count the number of distinct graphs G′G′ that Elsie may create, modulo 109**+7109+7. As with GG, G′G′ may contain self-loops but no parallel edges (meaning that there are 2N2**+N22N2+N2 distinct graphs on NN labeled vertices in total).

Each input contains TT (1T10541≤T≤1054) test cases that should be solved independently. It is guaranteed that the sum of N2N2 over all test cases does not exceed 105105.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line of the input contains TT, the number of test cases.The first line of each test case contains the integers NN and MM.

The next MM lines of each test case each contain two integers xx and yy (1xyN1≤x≤y≤N), denoting that there exists an edge between xx and yy in GG.

Consecutive test cases are separated by newlines for readability.

OUTPUT FORMAT (print output to the terminal / stdout):

For each test case, the number of distinct G′G′ modulo 109**+**7109+7 on a new line.

SAMPLE INPUT:

1

5 4
1 2
2 3
1 4
3 5

SAMPLE OUTPUT:

3

In the first test case, G′G′ could equal GG or one of the two following graphs:

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

SAMPLE INPUT:

7

4 6
1 2
2 3
3 4
1 3
2 4
1 4

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

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

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

6 7
1 2
2 3
1 3
1 4
4 5
5 6
1 6

10 10
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10

22 28
1 2
2 3
3 4
4 5
5 6
6 7
1 7
1 8
3 9
8 10
10 11
10 12
10 13
10 14
11 15
12 16
13 17
14 18
9 15
9 16
9 17
9 18
15 19
19 20
15 20
16 21
21 22
16 22

SAMPLE OUTPUT:

45
35
11
1
15
371842544
256838540

These are some larger test cases. Make sure to output the answer modulo 109**+7109+7. Note that the answer for the second-to-last test case is 245(mod109+7)**245(mod109+7).

SCORING:

  • All test cases in input 3 satisfy N5N≤5.
  • All test cases in inputs 4-5 satisfy M=N1M=N−1.
  • For all test cases in inputs 6-11, if it is not the case that fG**(x,b)=fG(y,b)fG(x,b)=fG(y,b) for all bb, then there exists bb such that fG(x,b)fG(x,b) is true and fG(y,b)**fG(y,b) is false.
  • Test cases in inputs 12-20 satisfy no additional constraints.