#include <stdio.h>
struct tree{
  int id;
  int left;
  int right;
  int p;
  int s;
  int dep;
  int deg;
  int h;
};

int main(){
  int n,i,j,si1,si2,pa,pc,hc,he;
  struct tree num[25];

  scanf("%d",&n); //節点の数の入力

//親、兄弟の初期値をー１、次数、高さの初期値を０に設定する
  for(i=0;i<n;i++){
    num[i].p=-1;
    num[i].s=-1;
    num[i].deg=0;
    num[i].h=0;
  }


  //左右の子供の設定
  for(i=0;i<n;i++){
    scanf("%d %d %d",&num[i].id,&num[i].left,&num[i].right);
    if(num[i].left!=-1 && num[i].right!=-1) num[i].deg=2;
    else if(num[i].left!=-1 || num[i].right!=-1) num[i].deg=1;

    si1=num[i].left;
    si2=num[i].right;
    num[si1].p=num[i].id;
    num[si2].p=num[i].id;
    num[si1].s=si2;
    num[si2].s=si1;
  }

  //depthを求める
  for(i=0;i<n;i++){
    if(num[i].p==-1)num[i].dep=0;
    
    else {
    pa=num[i].p;
    pc=1;
 
      while(num[pa].p!=-1){
  
      pc++;
      pa=num[pa].p;
      }
    
    num[i].dep=pc;
    }
  }

  //heightを求める
  for(i=0;i<n;i++){
    if(num[i].left==-1 && num[i].right==-1) num[i].h=0;

    else{
      pa=num[i].p;
      hc=1;
      //num[pa].h=hc;
      num[i].h=hc;
      hc++;
      num[pa].h=hc;
      while(num[pa].p!=-1){
	hc++;

	pa=num[pa].p;
	num[pa].h=hc;
      }

      num[pa].h=hc;
    }

  }

  for(i=0;i<n;i++){
  printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d,",
	 i,num[i].p,num[i].s,num[i].deg,num[i].dep,num[i].h);
  if(num[i].p==-1)printf(" root\n");
  else if(num[i].left==-1 && num[i].right==-1) printf(" leaf\n");
  else  printf(" internal node\n");
  }


  return 0;
}