import sys

sys.setrecursionlimit(500*500)

N = int(eval(input()))

edges = [list(map(int,input().split())) for _ in range(N-1)]

A = [[]for _ in range(N+1)]

ans = [-1]*(N+1)

for u,v,w in edges:

    A[u].append([v,w%2])

    A[v].append([u,w%2])



ans[1] = 0

def dfs(r):

    for a in A[r].copy():

        n = a[0]

        d = a[1]

        if ans[n] == -1:

            ans[n] = (ans[r] + d) % 2

            dfs(n)

dfs(1)

for a in ans[1:]:

    print((a%2))

import sys

sys.setrecursionlimit(500*500)

N = int(eval(input()))

edges = [list(map(int,input().split())) for _ in range(N-1)]

A = [[] for _ in range(N+1)]



for edge in edges:

    A[edge[0]].append([edge[1],edge[2]])

    A[edge[1]].append([edge[0],edge[2]])



depth = [-1] * (N+1)

depth[1] = 0



def dfs(A,s):

    for v in A[s]:

        if depth[v[0]] == -1:

            depth[v[0]] = depth[s] + v[1]

            dfs(A,v[0])    

dfs(A,1)

for d in depth[1:]:

    if d % 2 == 0:

        print((0))

    else:

        print((1))
import sys

sys.setrecursionlimit(500 * 500)
N = int(eval(input()))
edges = [list(map(int, input().split())) for _ in range(N - 1)]
A = [[] for _ in range(N + 1)]
ans = [-1] * (N + 1)
for u, v, w in edges:
    A[u].append([v, w % 2])
    A[v].append([u, w % 2])
ans[1] = 0


def dfs(r):
    for a in A[r].copy():
        n = a[0]
        d = a[1]
        if ans[n] == -1:
            ans[n] = (ans[r] + d) % 2
            dfs(n)


dfs(1)
for a in ans[1:]:
    print((a % 2))

import sys

sys.setrecursionlimit(500 * 500)
N = int(eval(input()))
edges = [list(map(int, input().split())) for _ in range(N - 1)]
A = [[] for _ in range(N + 1)]
for edge in edges:
    A[edge[0]].append([edge[1], edge[2]])
    A[edge[1]].append([edge[0], edge[2]])
depth = [-1] * (N + 1)
depth[1] = 0


def dfs(A, s):
    for v in A[s]:
        if depth[v[0]] == -1:
            depth[v[0]] = depth[s] + v[1]
            dfs(A, v[0])


dfs(A, 1)
for d in depth[1:]:
    if d % 2 == 0:
        print((0))
    else:
        print((1))

-ans = [-1] * (N + 1) -for u, v, w in edges: -    A[u].append([v, w % 2]) -    A[v].append([u, w % 2]) -ans[1] = 0 +for edge in edges: +    A[edge[0]].append([edge[1], edge[2]]) +    A[edge[1]].append([edge[0], edge[2]]) +depth = [-1] * (N + 1) +depth[1] = 0 -def dfs(r): -    for a in A[r].copy(): -        n = a[0] -        d = a[1] -        if ans[n] == -1: -            ans[n] = (ans[r] + d) % 2 -            dfs(n) +def dfs(A, s): +    for v in A[s]: +        if depth[v[0]] == -1: +            depth[v[0]] = depth[s] + v[1] +            dfs(A, v[0]) -dfs(1) -for a in ans[1:]: -    print((a % 2)) +dfs(A, 1) +for d in depth[1:]: +    if d % 2 == 0: +        print((0)) +    else: +        print((1))