#include<stdio.h>

#define N 100000
#define NIL -1

struct Node{
  int p,l,r;
};
/*
p:parent
l:left-child
r:right sibling
*/
struct Node T[N];

int n,D[N],H[N];
void print(int);



main(){
  int i,j,k,id,l,r;
  
  for ( i = 0; i < n; i++ ) {
    T[i].p = T[i].l = T[i].r = NIL;
  }
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%d %d %d",&id,&l,&r);
    T[id].p=id;
    T[id].l=l;
    T[id].r=r;
  }
}

void print(int u){
  printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, ",u,parent(u),sibling(u),degree(u),D[u],hantei(u));
 hairetu(u);
}

int parerent(int u){
  int i;
  if(u==M)
    return -1;
  else {
    for(i=0;i<n;i++){
      if(T[i].l==u || T[i].r == u){
	return T[i].p;
	break;
      }
    }
  }
}
void hantei(int u){
 if(getDepth(a) == 0){
    printf("root\n");
  }
// leaf
  else if(T[a].r ==NIL && T[a].l ==NIL){
      printf("leaf\n");
    }
  
  // internal node
  else if(T[a].r!=NIL || T[a].l!= NIL){
    printf("internal node\n"); 
  }
}
int sibling(int m){
  int i;
  if(m==
  for(i=0;i<n;i++){
    if(T[i].l == m){
    return T[i].r;
      }
      if(T[i].r == m){
    return T[i].l;
      }
  }
     }
}

int height(int c){
  int l=0;
  int r=0;

  if(T[c].l==-1 && T[c].r == -1){
    return 0;
  }
  if(T[c].l!=-1 && T[c].r != -1){
    l = height(T[c].l)+1;
    r = height(T[c].r)+1;
    if(l<r){
      return r;
    }
    else return l;
  }
  else if(T[c].l==-1&&T[c].r!=-1){
    return height(T[c].r)+1;
  }
  else if(T[c].l!=-1&&T[c].r==-1){
    return height(T[c].l)+1;
  }
}