#include <bits/stdc++.h>
using namespace std;
struct node{int par,l,r,sib,deg,h;};
node N[30];

int get_dep(int x,int dep){
  if(N[x].par==-1) return dep;
  return get_dep(N[x].par,dep+1);
}

int mk_h(int x){
  int res=0;
  if(N[x].l!=-1)mk_h(N[x].l),res=N[N[x].l].h+1;
  if(N[x].r!=-1)mk_h(N[x].r),res=max(res,N[N[x].r].h+1);
  return N[x].h=res;
}


int main(){
  int n;
  cin>>n;
  for(int i=0;i<n;i++)N[i].par=N[i].sib=-1,N[i].h=0;;


  for(int i=0,a;i<n;i++){
    cin>>a;
    cin>>N[a].l>>N[a].r;
    if(N[a].l!=-1) N[N[a].l].par=a;
    if(N[a].r!=-1) N[N[a].r].par=a;
    if(N[a].l!=-1)N[N[a].l].sib=N[a].r;
    if(N[a].r!=-1)N[N[a].r].sib=N[a].l;
    N[a].deg=(N[a].r!=-1)+(N[a].l!=-1);
  }
  for(int i=0;i<n;i++)if(N[i].par==-1)N[i].h=mk_h(i);

  for(int i=0;i<n;i++){
    printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, ",i,N[i].par,N[i].sib,N[i].deg,get_dep(i,0),N[i].h);
    if(N[i].par==-1) cout <<"root";
    else if(N[i].l==-1&&N[i].r==-1) cout <<"leaf";
    else cout << "internal node";
    cout <<endl;
  }
  return 0;
}