def main(): import sys input_data = sys.stdin.read().strip().split() if not input_data: return it = iter(input_data) N = int(next(it)) M = int(next(it)) # 道路候補のリスト.各候補は (重み, u, v) として格納する. # ここで重み = 6/(7-C) となる. edges = [] for _ in range(M): u = int(next(it)) v = int(next(it)) c = int(next(it)) weight = 6 / (7 - c) # インデックスは 0-indexed にする edges.append((weight, u - 1, v - 1)) # Kruskal法のため重みでソート edges.sort(key=lambda x: x[0]) parent = list(range(N)) def find(x): if parent[x] != x: parent[x] = find(parent[x]) return parent[x] total_expectation = 0.0 count = 0 for w, u, v in edges: ru, rv = find(u), find(v) if ru != rv: parent[ru] = rv total_expectation += w count += 1 if count == N - 1: break print(total_expectation) if __name__ == '__main__': main()