#include #include #include using namespace std; using Modint = atcoder::modint1000000007; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int N; cin >> N; vector> edge(N - 1); for(auto& [A, B, C] : edge){ cin >> A >> B >> C; A--; B--; } Modint ans = 0; for(int i = 30; i--; ){ ans += ans; atcoder::dsu uf(N); for(auto [A, B, C] : edge) if(C >> i & 1){ ans += uf.size(A) * uf.size(B); uf.merge(A, B); } } cout << ans.val() << endl; }