#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
//bool vis[1000];
//int x[]={1,-1,0,0};
//int y[]={0,0,1,-1};
//int f=0;
//"'';
void dfs(int i,ll d,vector<vector<vector<ll> > > &adj,vector<ll> &v){
v[i]=d;
//cout<<i<<" "<<d<<endl;
for(int j=0;j<adj[i].size();j++){
    int u=adj[i][j][0];
   ll w=adj[i][j][1];
    if(v[u]==-1){
        dfs(u,d^w,adj,v);
    }
}
}
int main() {
int n;
cin>>n;
vector<vector<vector<ll> > > adj(n);
for(int i=1;i<n;i++){
  ll a,b,c;
    cin>>a>>b>>c;
    a--;
    b--;
    adj[a].push_back({b,c});
    adj[b].push_back({a,c});
}
vector<ll> v(n,-1);
dfs(0,0,adj,v);
int dp[62];
long long mod=1e9+7;
long long ans=0;
memset(dp,0,sizeof(dp));
for(int i=0;i<(int)v.size();i++){
        //cout<<v[i]<<endl;
    for(ll j=0;j<62;j++){
        if(v[i]&(1ll<<j)){
            dp[j]++;
        }
    }
}
for(ll i=0;i<62;i++){
    long long a=dp[i];
    long long b=v.size()-a;
    //cout<<a<<" "<<b<<endl;
    ll z=(a*b)%mod;
    ll zz=pow(2ll,i);
    zz=zz%mod;
    zz=(z*zz)%mod;
    //cout<<z<<" "<<zz<<endl;
    ans=(ans+zz)%mod;
    //cout<<i<<endl;
}
cout<<ans<<endl;
}




//
//                       _oo0oo_
//                      o8888888o
//                      88" . "88
//                      (| -_- |)
//                      0\  =  /0
//                    ___/`---'\___
//                  .' \\|     |// '.
//                 / \\|||  :  |||// \
//                / _||||| -:- |||||- \
//               |   | \\\  -  /// |   |
//               | \_|  ''\---/''  |_/ |
//               \  .-\__  '-'  ___/-. /
//             ___'. .'  /--.--\  `. .'___
//          ."" '<  `.___\_<|>_/___.' >' "".
//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
//         \  \ `_.   \_ __\ /__ _/   .-` /  /
//     =====`-.____`.___ \_____/___.-`___.-'=====
//                       `=---='

#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define ll long long
#define gmax(x,y) x=max(x,y)
#define gmin(x,y) x=min(x,y)
#define F first
#define S second
#define P pair
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,a,b) for(int i=a;i<b;i++)
#define V vector
#define RE return
#define ALL(a) a.begin(),a.end()
#define MP make_pair
#define PB emplace_back
#define PF emplace_front
#define FILL(a,b) memset(a,b,sizeof(a))
#define lwb lower_bound
#define upb upper_bound
#define lc (x<<1)
#define rc ((x<<1)|1)
using namespace std;
V<int> v[200005];
V<P<int,int> > g[200005];
int d[200005],ma[200005],it[200005],pl[200005];
void dfs(int x,int y){
	for(auto u:v[x])if(u!=y)g[x].PB(MP(pl[u],u));
	sort(ALL(g[x]));
	ma[x]=d[x]+it[x];
	for(auto u:g[x])if(u.S!=y){
		it[u.S]=ma[x]+1-d[x];
		d[u.S]=d[x]+1;
		dfs(u.S,x);
		gmax(ma[x],ma[u.S]);
	}
}
int siz[200005],in[200005];
int n;
void get(int x,int y){
	siz[x]=1;pl[x]=0;
	for(auto u:v[x])if(u!=y){
		d[u]=d[x]+1;
		get(u,x);
		gmax(pl[x],pl[u]);
		siz[x]+=siz[u];
		gmax(in[x],siz[u]);
	}
	pl[x]++;
	gmax(in[x],n-siz[x]);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	FOR(i,2,n){
		int x,y;
		cin>>x>>y;
		v[x].PB(y);
		v[y].PB(x);
	}
	get(1,-1);
	int st=1;
	FOR(i,2,n){
		if(d[i]>d[st])st=i;
	}
	get(st,-1);
	it[st]=1;
	dfs(st,-1);
	FOR(i,1,n)cout<<it[i]<<' ';
	RE 0;
}








