#include using namespace std; using ll = long long; #define rep(i, s, e) for (int i = (int)(s); i < (int)(e); ++i) #include #include using namespace atcoder; using mint = modint1000000007; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int N; cin >> N; vector>> G(N); rep(i, 0, N - 1) { int A, B, C; cin >> A >> B >> C; --A, --B; G[A].push_back({B, C}); } mint ans = 0; rep(i, 0, 32) { dsu uf(N); rep(v, 0, N) { for (pair e : G[v]) { if ((e.second >> i) & 1) uf.merge(v, e.first); } } rep(v, 0, N) if (uf.leader(v) == v) { mint siz = uf.size(v); ans += siz*(siz - 1) / 2 * mint(2).pow(i); } } cout << ans.val() << '\n'; }