#include <stdio.h>
#include <stdlib.h>
#define M 10000
#define N -1
 
typedef struct{
  int left;
  int right;
  int parent;
}node;
 
node *t;
int n,D[M],H[M];

int getSibling(int c){
 
  if(t[c].parent==N) return N; 
  if(t[t[c].parent].left!=c && t[t[c].parent].left!=N) return t[t[c].parent].left;
  if(t[t[c].parent].right!=c && t[t[c].parent].right!=N) return t[t[c].parent].right;
  return N;
  
}
 
void setDepth(int c,int d){

  if(c==N) return;
  D[c]=d;

  setDepth(t[c].left,d+1);
  setDepth(t[c].right,d+1);
}
 
int setHeight(int c){
  int na=0,nb=0;
  
  if(t[c].left!=N) na=setHeight(t[c].left)+1;
  if(t[c].right!=N) nb=setHeight(t[c].right)+1;

  if(na>nb) H[c]=na;
  else H[c]=nb;
  
  return H[c];
}
 
void print(int c){
  int deg=0;
 
  printf("node %d: ",c);
  printf("parent = %d, ",t[c].parent);
  printf("sibling = %d, ",getSibling(c));
  if(t[c].left!=N) deg+=1;
  if(t[c].right!=N) deg+=1;
  printf("degree = %d, ",deg);
  printf("depth = %d, ",D[c]);
  printf("height = %d, ",H[c]);

  if(t[c].parent==N){
    printf("root\n");
  }else if(t[c].left==N && t[c].right==N){
    printf("leaf\n");
  }else{
    printf("internal node\n");
  }
}
 
int main(){
  int i,v,l,r,root=0;
   
  scanf("%d",&n);
   
  for(i=0;i<n;i++) t[i].parent = N;
 
  for(i=0;i<n;i++){
    scanf("%d %d %d",&v,&l,&r);
    t[v].left=l;
    t[v].right=r;
    if(l!=N)t[l].parent=v;
    if(r!=N)t[r].parent=v;
  }
 
  for(i=0;i<n;i++) if(t[i].parent==N) root=i;

  setDepth(root,0);
  setHeight(root);

  for(i=0;i<n;i++) print(i);
 
  return 0;
}
 
 