#include<bits/stdc++.h>
#define NIL -1
using namespace std;
const int MAX=30;
int n,D[MAX],H[MAX];
struct Node{
    int p,l,r;//parent,left,right
    Node(int p=NIL){this->p=p;}
}T[MAX];
void setDepth(int cur,int dep){
    D[cur]=dep;
    if(T[cur].l!=NIL) setDepth(T[cur].l,dep+1);
    if(T[cur].r!=NIL) setDepth(T[cur].r,dep+1);
}
int setHeight(int cur){
    int hl=0,hr=0;
    if(T[cur].l!=NIL) hl=setHeight(T[cur].l)+1;
    if(T[cur].r!=NIL) hr=setHeight(T[cur].r)+1;
    return H[cur]=max(hl,hr);
}
int getSibling(int cur){
    if(T[cur].p==NIL) return NIL;
    if(T[T[cur].p].l!=cur&&T[T[cur].p].l!=NIL) return T[T[cur].p].l;
    if(T[T[cur].p].r!=cur&&T[T[cur].p].r!=NIL) return T[T[cur].p].r;
    return NIL;
}
int getDegree(int cur){
    int deg=0;
    if(T[cur].l!=NIL) deg++;
    if(T[cur].r!=NIL) deg++;
    return deg;
}
void print(int cur){
    cout<<"node "<<cur<<": parent = "<<T[cur].p<<", sibling = "<<getSibling(cur)<<", degree = ";
    cout<<getDegree(cur)<<", depth = "<<D[cur]<<", height = "<<H[cur]<<", ";
    if(T[cur].p==NIL) cout<<"root\n";
    else if(T[cur].l==NIL&&T[cur].r==NIL) cout<<"leaf\n";
    else cout<<"internal node\n";
}
int main()
{
    int id,left,right;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>id>>left>>right;
        T[id].l=left;
        T[id].r=right;
        if(left!=NIL) T[left].p=id;
        if(right!=NIL) T[right].p=id;
    }
    int root;
    for(int i=0;i<n;i++) if(T[i].p==NIL){root=i;break;}
    setDepth(root,0);
    setHeight(root);
    for(int i=0;i<n;i++) print(i);
}

