#include #include using namespace std; using namespace atcoder; using ll = long long; #define all(x) x.begin(), x.end() #define rep(i, n) for (int i = 0; i < n; i++) #define mint modint1000000007 int main(void) { int n; cin >> n; mint ans, bi2; bi2 = 1; vector> abc(n, vector(3)); rep(i, n - 1)rep(j, 3){ cin >> abc[i][j]; } rep(bit, 32){ dsu U(n + 1); rep(i, n - 1){ int a = abc[i][0]; int b = abc[i][1]; int c = abc[i][2]; if(1 & (c >> bit)) U.merge(a - 1, b - 1); } map s; rep(i, n){ int x = U.leader(i); if (s.find(x) != s.end()) continue; else{ s[x] = 1; mint c = U.size(i); ans += bi2 * c * (c - 1) / 2; } } bi2 *= 2; } cout << ans.val() << endl; return 0; }