#include<stdio.h>
#include<stdlib.h>
#define N 25
#define NIL -1
 
int getDepth(int);
void print(int);
int rec(int,int);
int height(int);
 
struct Node{
  int p,l,r;
    };
struct Node T[N];
int D[N],degree[N],n;
 
 
int main(){
 
  int i,j,v,d,c,l,r;
 
  scanf("%d",&n);
  for(i=0;i<n;i++){
    T[i].p=T[i].l=T[i].r=NIL;
  }
  for(i=0;i<n;i++){
    scanf("%d%d%d",&v,&T[i].l,&T[i].r);
    if(T[i].l!=-1 && T[i].r!=-1)
      degree[i]=2;
    for(j=0;j<n;j++){
      if(v==T[j].l || v==T[j].r)
	T[i].p=j;
    }
  }
 
  for(i=0;i<n;i++){
    if(T[i].p==NIL) r=i;
  }
  rec(r,0);
 
  for(i=0;i<n;i++){
    print(i);
    }
  return 0;
}
 
 
int getDepth(int u){
  int d=0; 
  while(T[u].p!=NIL){
    u=T[u].p;
    d++;
      }
  return d;
}
 
 
  void print(int u){
    int i,c;
    printf("node %d: ",u);
    printf("parent = %d, ",T[u].p);
    printf("sibling = %d,",sibling(u));
    printf("degree = %d,",degree[u]);
    printf("depth = %d,",getDepth(u));
    printf("height = %d,",height(u));
    if(T[u].p==NIL)
      printf(" root\n");
    else if (T[u].l==NIL)
      printf(" leaf\n");
    else printf(" internal node\n");
  }

 
 
int rec(int u,int p){
  D[u]=p;
  if(T[u].r!=NIL) rec(T[u].r,p);
  if(T[u].l!=NIL) rec(T[u].l,p+1);
}

    int sibling(int u){
  int i;
  for(i=0;i<n;i++){
    if(T[u].p==T[i].p && u!=i)
      return i;
  }
  return -1;
}

int height(int u){
  int lh=0,rh=0;
  if(T[u].l==NIL && T[u].r==NIL)
    return 0;
  lh=height(T[u].l);
  rh=height(T[u].r);
  if(lh>rh) return lh+1;
  else return rh+1;
}
 