import java.util.*

fun main(arr:Array<String>) {
    val pointCount = readLine()!!.toInt()
    val road = mutableMapOf<Int,MutableMap<Int,Long>>()
    (1..pointCount-1) .forEach {
        val (p_1, p_2, l) = readLine()!!.split(" ").map { it.toLong() }
        val (p1, p2) = listOf(p_1, p_2).map { it.toInt() - 1 }
        if(!road.containsKey(p1)) {
            road[p1] = mutableMapOf()
        }
        if(!road.containsKey(p2)) {
            road[p2] = mutableMapOf()
        }
        road[p1]!![p2] = l.toLong()
        road[p2]!![p1] = l.toLong()
    }
    val prc = Proc(pointCount, road)
    prc.Proc()
}

class Proc(val pointCount:Int, val roadMap:MutableMap<Int,MutableMap<Int, Long>>) {
    val color = (1..pointCount).map {Col.None }.toMutableList()
    fun Proc() {
        color[0] = Col.White
        Paint(0)
        color.forEach { println(if(it == Col.White)"0" else "1") }
    }

    fun Paint(target:Int) {
        val que = LinkedList<Int>()
        que.push(target)
        while (que.isNotEmpty()) {
            val current = que.pop()
            val currentColor = color[current]
            for((next, l) in roadMap[current]!!) {
                if(color[next] != Col.None) {
                    continue
                }
                var nextColor = currentColor
                if(l % 2 != 0L) {
                    if(currentColor == Col.White) {
                        nextColor = Col.Black
                    } else {
                        nextColor = Col.White
                    }
                }
                color[next] = nextColor
                que.push(next)
            }
        }
    }
}

enum class Col {
    White,
    Black,
    None
}
