编程题
### 问题描述
小齐在当地大学上了一个晚上的算法课程,学到了最小生成树的知识。然而,小齐发现他的农场设计不够高效,想要简化农场的布局。
农场当前被安排成一个图,其中顶点表示田地,边表示这些田地之间的路径,每条路径都有一个关联的长度。小齐注意到,对于每个不同的长度,他的农场上最多有三条路径共享这个长度。小齐想要删除一些路径,使得农场变成一棵树——即任意两个田地之间只有一条唯一的路径。此外,小齐希望这棵树是最小生成树——具有边长度和最小可能总和的树。
帮助小齐计算出从他的农场图派生的最小生成树的边长度总和,以及他可以创建的不同最小生成树的数量。
### 输入格式
- 第 $1$ 行: 两个整数 $N$ 和 $M$($1 \leq N \leq 40,000$; $1 \leq M \leq 100,000$),表示农场图中的顶点和边的数量。顶点编号为 $1$ 到 $N$。
- 接下来的 $M$ 行:每行包含三个整数 $a_i, b_i$ 和 $n_i$($1 \leq a_i, b_i \leq N$; $1 \leq n_i \leq 1,000,000$),表示从顶点 $a_i$ 到 $b_i$ 的一条边,长度为 $n_i$。每个边的长度 $n_i$ 不会出现超过三次。
### 输出格式
- 第 $1$ 行: 两个整数,表示最小生成树的边长度总和和最小生成树的数量(对 $1,000,000,007$ 取模)。
### 样例输入
```
4 5
1 2 1
3 4 1
1 3 2
1 4 2
2 3 2
```
### 样例输出
```
4 3
```
### 评测数据规模
$1 \leq N \leq 40,000$,$1 \leq M \leq 100,000$。