#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;
}