#include #include #include #define rep(i, n) for(i = 0; i < n; i++) using namespace std; using namespace atcoder; using mint = modint1000000007; int n; int a[100000], b[100000], c[100000]; int main() { int i, j; cin >> n; rep(i, n - 1) { cin >> a[i] >> b[i] >> c[i]; a[i]--; b[i]--; } mint inv2 = mint(2).inv(); mint ans = 0; rep(i, 30) { dsu uf(n); rep(j, n - 1) { if ((c[j] >> i) & 1) { uf.merge(a[j], b[j]); } } mint tori = 0; for (auto g: uf.groups()) { int sz = g.size(); tori += mint(sz) * mint(sz - 1) * inv2; } ans += mint(1 << i) * tori; } cout << ans.val() << endl; return 0; }