#include<bits/stdc++.h>

using namespace std;

const int N=1e4+10;

int p[N],son[N],d[N],h[N];

vector<int> G[N];

void init(int n)
{
    memset(p,-1,sizeof(p));
    memset(son,0,sizeof(son));
    memset(d,0,sizeof(d));
    memset(h,0,sizeof(h));

    for(int i=0;i<n;i++)
    {
        G[i].clear();
    }
}

int dfs(int root, int depth)
{
    d[root]=depth;

    int height=0;

    for(int i=0;i<G[root].size();i++)
    {
        height=max(height,dfs(G[root][i],depth+1));
    }

    return 1+(h[root]=height);
}

void display(int x)
{
    char s[100];

    if(p[x]==-1)
    {
        strcpy(s,"root");
    }else if(!G[x].size())
    {
        strcpy(s,"leaf");
    }else
    {
        strcpy(s,"internal node");
    }
    printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, %s\n",x,p[x],(p[x]==-1)?-1:son[p[x]]-x,G[x].size(),d[x],h[x],s);
}

int main()
{
    int n;

    while(scanf("%d",&n)!=EOF)
    {
        int a,b,c;

        init(n);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d %d",&a,&b,&c);

            if(b!=-1)
            {
                p[b]=a; G[a].push_back(b);
            }

            if(c!=-1)
            {
                p[c]=a; G[a].push_back(c);

            }

            son[a]=b+c;
        }

        int root;

        for(int i=0;i<n;i++)
        {
            if(p[i]==-1)
            {
                root=i;
                break;
            }
        }

        dfs(root,0);

        for(int i=0;i<n;i++)
        {
            display(i);
        }
    }




    return 0;
}

