using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*
 */

public class ALDS1_7_B
{
    private struct Node
    {
        public int NodeId;
        public int ParentId;
        public int SiblingId;
        public int LeftId;
        public int RightId;
        public int Depth;
        public int Degree;
        public int Height;
        public string Type
        {
            get
            {
                if (ParentId == -1)
                {
                    return "root";
                }
                else if (LeftId == -1 && RightId == -1)
                {
                    return "leaf";
                }
                else
                {
                    return "internal node";
                }
            }
        }

        public Node(int nodeId)
        {
            NodeId = nodeId;
            ParentId = -1;
            LeftId = -1;
            RightId = -1;
            SiblingId = -1;
            Depth = -1;
            Degree = 0;
            Height = -1;
        }
    }

    public static void Main(string[] args)
    {
        //var exStdIn = new System.IO.StreamReader( "input.txt" );
        //System.Console.SetIn( exStdIn );

        int n = int.Parse(Console.ReadLine());
        Node[] nodes = new Node[n];
        for (int i = 0; i < n; i++)
        {
            nodes[i] = new Node(i);
        }

        for (int i = 0; i < n; i++)
        {
            string[] str = Console.ReadLine().Split(' ');
            int index = int.Parse(str[0]);
            int leftId = int.Parse(str[1]);
            int rightId = int.Parse(str[2]);
            if (leftId != -1)
            {
                nodes[index].LeftId = leftId;
                nodes[leftId].ParentId = index;
                nodes[leftId].SiblingId = rightId;
                nodes[index].Degree++;
            }
            if (rightId != -1)
            {
                nodes[index].RightId = rightId;
                nodes[rightId].ParentId = index;
                nodes[rightId].SiblingId = leftId;
                nodes[index].Degree++;
            }
        }

        int rootId = -1;
        for (int i = 0; i < n; i++)
        {
            if (nodes[i].ParentId == -1)
            {
                rootId = i;
                break;
            }
        }

        Depth(nodes, rootId, 0);

        for (int i = 0; i < n; i++)
        {
            Console.WriteLine(string.Format("node {0}: parent = {1}, sibling = {2}, degree = {3}, depth = {4}, height = {5}, {6}",
                i, nodes[i].ParentId, nodes[i].SiblingId, nodes[i].Degree, nodes[i].Depth, Height(nodes, i), nodes[i].Type));
        }
    }

    private static void Depth(Node[] nodes, int i, int depth)
    {
        nodes[i].Depth = depth;
        if (nodes[i].LeftId != -1)
        {
            Depth(nodes, nodes[i].LeftId, depth + 1);
        }
        if (nodes[i].RightId != -1)
        {
            Depth(nodes, nodes[i].RightId, depth + 1);
        }
    }

    private static int Height(Node[] nodes, int i)
    {
        if (nodes[i].Height != -1)
        {
            return nodes[i].Height;
        }
        if (nodes[i].LeftId == -1 && nodes[i].RightId == -1)
        {
            nodes[i].Height = 0;
            return 0;
        }
        if (nodes[i].LeftId == -1)
        {
            nodes[i].Height = Height(nodes, nodes[i].RightId) + 1;
            return nodes[i].Height;
        }
        if (nodes[i].RightId == -1)
        {
            nodes[i].Height = Height(nodes, nodes[i].LeftId) + 1;
            return nodes[i].Height;
        }
        nodes[i].Height = Math.Max(Height(nodes, nodes[i].RightId), Height(nodes, nodes[i].LeftId)) + 1;
        return nodes[i].Height;
    }
}



Measured memory_bytes: 17952