P8979 [AtCoder] diverta 2019 Programming Contest - Edge Ordering
普及
题目描述

You are given a simple connected undirected graph G consisting of N vertices and M edges. The vertices are numbered 1 to N, and the edges are numbered 1 to M.

Edge i connects Vertex a_i and b_i bidirectionally. It is guaranteed that the subgraph consisting of Vertex $1,2,\ldots,N$ and Edge $1,2,\ldots,N-1$ is a spanning tree of G.

An allocation of weights to the edges is called a good allocation when the tree consisting of Vertex $1,2,\ldots,N$ and Edge $1,2,\ldots,N-1$ is a minimum spanning tree of G.

There are M! ways to allocate the edges distinct integer weights between 1 and M. For each good allocation among those, find the total weight of the edges in the minimum spanning tree, and print the sum of those total weights modulo 10^{9}+7.

Constraints

  • All values in input are integers.
  • $2 \leq N \leq 20$
  • $N-1 \leq M \leq N(N-1)/2$
  • $1 \leq a_i, b_i \leq N$
  • G does not have self-loops or multiple edges.
  • The subgraph consisting of Vertex $1,2,\ldots,N$ and Edge $1,2,\ldots,N-1$ is a spanning tree of G.

Input

Input is given from Standard Input in the following format:

N M
a_1 b_1
$\vdots$
a_M b_M

Output

Print the answer.

Examples

Input

3 3
1 2
2 3
1 3

Output

6

Input

4 4
1 2
3 2
3 4
1 3

Output

50

Input

15 28
10 7
5 9
2 13
2 14
6 1
5 12
2 10
3 9
10 15
11 12
12 6
2 12
12 8
4 10
15 3
13 14
1 15
15 12
4 14
1 7
5 11
7 13
9 10
2 7
1 9
5 6
12 14
5 2

Output

657573092

输入格式

见题面

输出格式

见题面

样例输入
4 4 1 2 3 2 3 4 1 3
样例输出
50