using System;
using System.Collections.Generic;
using System.IO;

namespace abc126
{
    class ProgramE
    {
        struct Info
        {
            public int U;
            public int V;
            public int W;
        }

        static void Main(string[] args)
        {
            var scanner = new Scanner();
            var n = scanner.GetNextAsInt();

            var infos = new Info[n - 1];
            var connections = new List<int>[n];
            var borw = new int[n];

            for (var i = 0; i < n; i++)
            {
                connections[i] = new List<int>();
                borw[i] = -1;
            }

            for (var i = 0; i < n - 1; i++)
            {
                var tmp = scanner.ToIntArrayFromNextLine();
                var ui = tmp[0] - 1;
                var vi = tmp[1] - 1;
                var wi = tmp[2] % 2;

                infos[i] = new Info() {U = ui, V = vi, W = wi};
                connections[ui].Add(i);
                connections[vi].Add(i);
            }

            var queue = new Queue<int>();
            queue.Enqueue(0);
            borw[0] = 0;

            int point;
            while (queue.Count > 0)
            {
                point = queue.Dequeue();
                var borwCurrent = borw[point];
                var cons = connections[point];

                foreach (var con in cons)
                {
                    var info = infos[con];
                    var pointOther = info.U == point ? info.V : info.U;
                    if (borw[pointOther] != -1) continue;

                    borw[pointOther] = borwCurrent ^ info.W;
                    queue.Enqueue(pointOther);
                }
            }

            Console.WriteLine(string.Join(Environment.NewLine, borw));
        }
    }

    #region String Scanner
    public class Scanner
    {
        private const char Separator = ' ';
        private readonly StreamReader _Stream = new StreamReader(Console.OpenStandardInput());
        private int _Pos;
        private string[] _Line = new string[0];

        #region get a element
        public string GetNext()
        {
            // ReSharper disable once InvertIf
            if (this._Pos >= this._Line.Length)
            {
                // ReSharper disable once PossibleNullReferenceException
                this._Line = this._Stream.ReadLine().Split(Separator);
                this._Pos = 0;
            }
            return this._Line[this._Pos++];
        }
        public int GetNextAsInt()
        {
            return int.Parse(this.GetNext());
        }
        public long GetNextAsLong()
        {
            return long.Parse(this.GetNext());
        }
        public double GetNextAsDouble()
        {
            return double.Parse(this.GetNext());
        }
        #endregion

        #region get array
        public string[] ToArrayFromNextLine()
        {
            if (this._Pos >= this._Line.Length)
            {
                // ReSharper disable once PossibleNullReferenceException
                this._Line = this._Stream.ReadLine().Split(Separator);
            }

            this._Pos = this._Line.Length;
            return this._Line;
        }
        public int[] ToIntArrayFromNextLine()
        {
            return ToIntArray(this.ToArrayFromNextLine());
        }
        public long[] ToLongArrayFromNextLine()
        {
            return ToLongArray(this.ToArrayFromNextLine());
        }
        public double[] ToDoubleArrayFromNextLine()
        {
            return ToDoubleArray(this.ToArrayFromNextLine());
        }
        #endregion

        #region convert array
        private static int[] ToIntArray(string[] array)
        {
            var result = new int[array.Length];
            for (var i = 0; i < array.Length; i++)
            {
                result[i] = int.Parse(array[i]);
            }
            return result;
        }
        private static long[] ToLongArray(string[] array)
        {
            var result = new long[array.Length];
            for (var i = 0; i < array.Length; i++)
            {
                result[i] = long.Parse(array[i]);
            }
            return result;
        }
        private static double[] ToDoubleArray(string[] array)
        {
            var result = new double[array.Length];
            for (var i = 0; i < array.Length; i++)
            {
                result[i] = double.Parse(array[i]);
            }
            return result;
        }
        #endregion
    }
    #endregion
}


Measured memory_bytes: 31736