#include using namespace std; const long long MOD = 1E9 + 7; long long POW(long long a, long long b) { long long ans = 1; while (b > 0) { if (b & 1) { ans *= a; ans %= MOD; } a *= a; a %= MOD; b /= 2; } return ans; } int main() { int N; cin >> N; vector>> E(N); for (int i = 0; i < N - 1; i++) { int A, B, C; cin >> A >> B >> C; A--; B--; E[A].push_back({C, B}); E[B].push_back({C, A}); } long long ans = 0; for (int i = 0; i < 32; i++) { vector used(N, false); for (int j = 0; j < N; j++) { if (!used[j]) { long long cnt = 1; used[j] = true; queue Q; Q.push(j); while (!Q.empty()) { int v = Q.front(); Q.pop(); for (auto p : E[v]) { int w = p.second; int c = p.first; if (!used[w]) { if (c >> i & 1) { cnt++; used[w] = true; Q.push(w); } } } } ans += cnt * (cnt - 1) / 2 * POW(2, i) % MOD; } } } cout << ans % MOD << endl; }