#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 2e5, oo = 2e18, MOD = 1e9+7;
struct DSU {
vector<int> sizes;
vector<int> parent;
DSU(int n) {
sizes.resize(n + 1);
parent.resize(n + 1);
for (int i = 0; i <= n; i++) {
parent[i] = i;
sizes[i] = 1;
}
}
int find_root(int u) {
if (parent[u] == u)
return u;
return parent[u] = find_root(parent[u]);
}
bool merge(int u, int v) {
int root_u = find_root(u);
int root_v = find_root(v);
if (root_u == root_v)
return 0;
if (sizes[root_u] > sizes[root_v])
swap(root_u, root_v);
parent[root_u] = root_v;
sizes[root_v] += sizes[root_u];
return 1;
}
};
int powmod(int b, int p) {
int res = 1;
while (p) {
if (p & 1) res = (res * b) % MOD;
b = (b * b) % MOD;
p >>= 1;
}
return res;
}
int inv(int b) {
return powmod(b, MOD - 2);
}
void solve() {
int n, m; cin >> n >> m;
vector<array<int, 3>> edges(m);
for (int i = 0; i < m; i++) {
for (int j = 0; j < 3; j++) cin >> edges[i][j];
edges[i][0]--;
edges[i][1]--;
}
int ans = 0, cnt = 0;
for (int msk = 0; msk < (1 << m); msk++) {
if (__builtin_popcount(msk) != (n-1))
continue;
DSU d(n);
bool can = true;
int val = 0;
for (int i = 0; i < m; i++) {
if (msk >> i & 1) {
if (!d.merge(edges[i][0], edges[i][1])) {
can = false;
break;
}
val += edges[i][2];
}
}
if (!can)
continue;
cnt++;
ans = (ans + val) % MOD;
}
ans = (ans * inv(cnt)) % MOD;
cout << ans;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif
int t; t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGVuZGwgICAgICdcbicKI2RlZmluZSBpbnQgICAgICBsb25nIGxvbmcKCmNvbnN0IGludCBOID0gMmU1LCBvbyA9IDJlMTgsIE1PRCA9IDFlOSs3OwoKc3RydWN0IERTVSB7CiAgdmVjdG9yPGludD4gc2l6ZXM7CiAgdmVjdG9yPGludD4gcGFyZW50OwogIERTVShpbnQgbikgewogICAgc2l6ZXMucmVzaXplKG4gKyAxKTsKICAgIHBhcmVudC5yZXNpemUobiArIDEpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgIHBhcmVudFtpXSA9IGk7CiAgICAgIHNpemVzW2ldID0gMTsKICAgIH0KICB9CiAgaW50IGZpbmRfcm9vdChpbnQgdSkgewogICAgaWYgKHBhcmVudFt1XSA9PSB1KQogICAgICByZXR1cm4gdTsKCiAgICByZXR1cm4gcGFyZW50W3VdID0gZmluZF9yb290KHBhcmVudFt1XSk7CiAgfQogIGJvb2wgbWVyZ2UoaW50IHUsIGludCB2KSB7CiAgICBpbnQgcm9vdF91ID0gZmluZF9yb290KHUpOwogICAgaW50IHJvb3RfdiA9IGZpbmRfcm9vdCh2KTsKICAgIGlmIChyb290X3UgPT0gcm9vdF92KQogICAgICByZXR1cm4gMDsKCiAgICBpZiAoc2l6ZXNbcm9vdF91XSA+IHNpemVzW3Jvb3Rfdl0pCiAgICAgIHN3YXAocm9vdF91LCByb290X3YpOwoKICAgIHBhcmVudFtyb290X3VdID0gcm9vdF92OwogICAgc2l6ZXNbcm9vdF92XSArPSBzaXplc1tyb290X3VdOwogICAgcmV0dXJuIDE7CiAgfQp9OwoKaW50IHBvd21vZChpbnQgYiwgaW50IHApIHsKICAgIGludCByZXMgPSAxOwogICAgd2hpbGUgKHApIHsKICAgICAgICBpZiAocCAmIDEpIHJlcyA9IChyZXMgKiBiKSAlIE1PRDsKICAgICAgICBiID0gKGIgKiBiKSAlIE1PRDsKICAgICAgICBwID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IGludihpbnQgYikgewogICAgcmV0dXJuIHBvd21vZChiLCBNT0QgLSAyKTsKfQoKCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbiwgbTsgY2luID4+IG4gPj4gbTsKICAgIHZlY3RvcjxhcnJheTxpbnQsIDM+PiBlZGdlcyhtKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAzOyBqKyspIGNpbiA+PiBlZGdlc1tpXVtqXTsKICAgICAgICBlZGdlc1tpXVswXS0tOwogICAgICAgIGVkZ2VzW2ldWzFdLS07CiAgICB9CiAgICBpbnQgYW5zID0gMCwgY250ID0gMDsKICAgIGZvciAoaW50IG1zayA9IDA7IG1zayA8ICgxIDw8IG0pOyBtc2srKykgewogICAgICAgIGlmIChfX2J1aWx0aW5fcG9wY291bnQobXNrKSAhPSAobi0xKSkgCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIERTVSBkKG4pOwogICAgICAgIGJvb2wgY2FuID0gdHJ1ZTsKICAgICAgICBpbnQgdmFsID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICBpZiAobXNrID4+IGkgJiAxKSB7CiAgICAgICAgICAgICAgICBpZiAoIWQubWVyZ2UoZWRnZXNbaV1bMF0sIGVkZ2VzW2ldWzFdKSkgewogICAgICAgICAgICAgICAgICAgIGNhbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsICs9IGVkZ2VzW2ldWzJdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghY2FuKQogICAgICAgICAgICBjb250aW51ZTsgICAKICAgICAgICBjbnQrKzsKICAgICAgICBhbnMgPSAoYW5zICsgdmFsKSAlIE1PRDsKICAgIH0KICAgIGFucyA9IChhbnMgKiBpbnYoY250KSkgJSBNT0Q7CiAgICBjb3V0IDw8IGFuczsKfQoKCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAogICAgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiAgICAvLyAjaWZuZGVmIE9OTElORV9KVURHRSAKICAgIC8vICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOyAKICAgIC8vICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7IAogICAgLy8gI2VuZGlmIAogICAgaW50IHQ7IHQgPSAxOwogICAgLy8gIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9