//----AUTHOR:kkdrummer----/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include<ext/rope>
using namespace __gnu_cxx;
using namespace __gnu_pbds;
using namespace std;
typedef    long long   ll;
typedef    long double   ld;
typedef    complex<ld>   P;
#define    X   real()
#define    Y   imag()
ld restant(P p){return abs(p);}
//polar(x,y) mag=l,arg=y
//typedef    unordered_set<ll>   usll;
//typedef    unordered_multiset<ll>   umsll;
typedef    multiset<ll>   msll;
typedef    set<ll>   sll;
typedef    vector<ll>   vll;
typedef    pair<ll,ll>   pll;
typedef    vector<pair<ll,ll> >   vpll;
typedef    priority_queue<ll>   pqll;
typedef    vector<int>   vi;
typedef    set<int>   si;
typedef    multiset<int>   msi;
//typedef    unordered_multiset<int>   umsi;
//typedef    unordered_set<int>   usi;
typedef     pair<int,int>   pi;
typedef    vector<pair<int,int> >   vpi;
typedef    vector<pair<double,double> >   vpd;
typedef    pair<double,double>   pd;
typedef    priority_queue<int>   pqi;
typedef    tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>   ind_set;
typedef    tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>   ind_setll;
#define    in   insert
#define    fi   first
#define    se   second
#define    pb   push_back
#define    mp   make_pair
#define    be   begin
#define    en   end
#define    itr   iterator
#define io ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define    mo   1000000007
#define    inf  9223372036854775807
#define    ninf   -inf
#define    ima   2147483647
#define    imi   -ima
#define    oncnt    __builtin_popcount
#define    zerobegin   __builtin_clz
#define    zeroend   __builtin_ctz
#define    parity   __builtin_parity
#define all(x) x.be(),x.en()
#define    eps   1e-9
const    ld   PI=3.14159265359;
inline ll modpow(ll x,ll n){if(n==0)return 1;if(n==1)return(x%mo);ll u=(modpow(x,n/2));u=(u*u)%mo;if(n%2!=0)u=(u*x%mo)%mo;return u;}
inline ll modinv(ll x){return modpow(x,mo-2);}
inline ll mmul(ll a,ll b){    if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;if(a*b>=mo)return(a*b)%mo;return(a*b);}
inline ll madd(ll a, ll b){if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;if(a+b>=mo)return(a+b)%mo;return(a+b);}
inline ll msub(ll a, ll b){if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;return((a-b+mo)%mo);}
inline ll mdiv(ll a,ll bb){if(a>=mo)a=a%mo;ll b=modinv(bb);if(b>=mo)b=b%mo;if(a*b>=mo)return(a*b)%mo;return(a*b);}
inline ll gcd(ll a,ll b){return __gcd(a,b);}


void dfs(int cur,int par[],vpi ch[],vpi ad[])
{
	//arr[cur]=ct++;
	//sbs[cur]=1;
	for(int i=0;i<ad[cur].size();i++)
	{
		int j=ad[cur][i].fi;
		if(j!=par[cur])
		{
			//hi[j]=hi[cur]+1;
			par[j]=cur;
			ch[cur].pb(ad[cur][i]);
			dfs(j,par,ch,ad);
			//sbs[cur]+=sbs[j];
		}
	}
	//dep[cur]=ct++;
	
}

void col(int cur,vpi ch[],int c[])
{
	for(int i=0;i<ch[cur].size();i++)
	{
		int j=ch[cur][i].fi;
	//	cout<<cur<<" "<<j<<" "<<ch[cur][i].se<<"\n";
		if(ch[cur][i].se==0)
		c[j]=c[cur];
		else
		c[j]=1-c[cur];
		col(j,ch,c);
	}
}


int main()
{
io
int testcases=1;//cin>>testcases;
while(testcases--)
{

int n;
cin>>n;
vpi ad[n+1];
int a,b,w;

for(int i=1;i<=n-1;i++)
{
	cin>>a>>b>>w;
	w=w%2;
	ad[a].pb(mp(b,w));
	ad[b].pb(mp(a,w));

}

int par[n+1]={0};
//int arr[n+1],dep[n+1];
//int hi[n+1]={0};
//int ct=0;
vpi ch[n+1];
//int sbs[n+1]={0};
dfs(1,par,ch,ad);
int c[n+1]={0};

col(1,ch,c);
for(int i=1;i<=n;i++)
cout<<c[i]<<"\n";


}return 0;}

Measured memory_bytes: 15616