Edge = Struct.new(:from, :to, :weight) N = gets.to_i G = Array.new(N + 1){ [] } T = Array.new(N + 1){ [] } # tree as root was 1 C = Array.new(N + 1) # node count of subtree (1 ... N).each do u,v,w = gets.split.map(&:to_i) G[u] << Edge.new(u, v, w) G[v] << Edge.new(v, u, w) end used = Array.new(N + 1) stack = [1] used[1] = true order = [] until stack.empty? u = stack.pop order << u G[u].each do |e| unless used[e.to] used[e.to] = true stack << e.to T[u] << e end end end order.reverse_each{|u| C[u] = T[u].inject(1){|c, e| c + C[e.to] } } ans = T.flatten.inject(0){|s, e| s + e.weight * C[e.to] * (N - C[e.to]) * 2} puts ans