#input of int(split by space)
def get_i()
  return gets.chomp.split(" ").map(&:to_i)
end
#input of float(split by space)
def get_f()
  return gets.chomp.split(" ").map(&:to_f)
end
#input of string(split by space)
def get()
  return gets.chomp.split(" ")
end
#input of string(split per one character)
def get_nsp()
  return gets.chomp.split("")
end
#yes or no decision
def yn_judge(bool,y="Yes",n="No")
  return bool ? y : n 
end
#create of array
def array(size1,init=nil,size2=-1)
  if size2==-1
      return Array.new(size1){init}
  else
      return Array.new(size2){Array.new(size1){init}}
  end
end

def max(a,b)
    return a>b ? a : b
end

def min(a,b)
    return a>b ? b : a
end

INF=Float::INFINITY

N=gets.to_i
def bfs(g)
    que=[0]
    cost=array(N,INF)
    cost[0]=0
    until que==[]
        p=que.shift
        g[p].each do|v,c|
            next unless cost[v]==INF
            cost[v]=cost[p]+c
            que.push(v)
        end
    end
    return cost
end
g=Array.new(N){[]}
(N-1).times do|i|
  u,v,w=get_i
  u-=1
  v-=1
  g[u].push([v,w])
  g[v].push([u,w])
end
cost=bfs(g)
ans=array(N)
ans[0]=0
1.upto(N-1) do|i|
  if cost[i].even?
      ans[i]=0
  else
      ans[i]=1
  end 
end
puts ans.join("\n")