def get_i() #空白区切の入力を数値(整数)の配列で返す
  return gets.chomp.split(" ").map(&:to_i)
end
def get_f() #空白区切の入力を数値(実数)の配列で返す
  return gets.chomp.split(" ").map(&:to_f)
end
def get() #空白区切の入力を文字列の配列で返す
  return gets.chomp.split(" ")
end
def get_nsp() #入力されたものを一文字ずつに区切った文字列の配列で返す
  return gets.chomp.split("")
end
def yn_judge(bool,y="Yes",n="No") #boolに真偽を投げることで、trueならy、falseならnの値を出力する
  return bool ? y : n 
end
def array(size,n=1,init=nil) #nに配列の次元数、sizeに配列の大きさ、initに初期値を投げることでその配列を返す
  if n==1
    return Array.new(size){init}
  else
    return Array.new(n).map{Array.new(size){init}}
  end
end


n=gets.to_i
neighL=Array.new(n-1)
(n-1).times do|i|
  u,v,w=get_i
  u-=1
  v-=1
  neighL[u]=[] if neighL[u].nil?
  neighL[u].push([v,w])
end
$ans=array(n,1,-1)
def dfs(g,i,color)
  $ans[i]=color
  return if g[i]==[] or g[i].nil?
  g[i].each do|v|
    next if $ans[v[0]]!=-1
    if (v[1]%2).zero?
      dfs(g,v[0],$ans[i])
    else
      dfs(g,v[0],($ans[i]+1)%2)
    end
  end
end

color=0
n.times do|i|
  next if $ans[i]!=-1
  dfs(neighL,i,color)
  color=(color+1)%2
end
puts $ans.join("\n")