#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

#define MAX 25
#define NIL -1
struct Node{
  int parent,left,right;
};

struct Node T[MAX];

int getSib(int id){
  if(T[id].parent==NIL) return -1;
  int p=T[id].parent;
  if(T[p].left != id) return T[p].left;
  else return T[p].right;
}

int getDegree(int id){
  int cnt=0;
  if(T[id].left != NIL) cnt++;
  if(T[id].right != NIL) cnt++;
  return cnt;
}

int getDepth(int id){
  int p=id;
  int dep=0;
  while(T[p].parent != NIL){
    dep++;
    p=T[p].parent;
  }
  return dep;
}

int getHeight(int id){
  if(T[id].left==NIL && T[id].right==NIL){
    return 0;
  }else if(T[id].left==NIL){
    return getHeight(T[id].right)+1;
  }else if(T[id].right==NIL){
    return getHeight(T[id].left)+1;
  }else{
    return max(getHeight(T[id].left),getHeight(T[id].right))+1;
  }
}

string getType(int id){
  if(T[id].parent==NIL) return "root";
  else if(T[id].left==NIL && T[id].right==NIL) return "leaf";
  else return "internal node";
}

int main(){
  int n; scanf("%d",&n);
  for(int i=0;i<n;i++){
    T[i].left=NIL;
    T[i].right=NIL;
    T[i].parent=NIL;
  }
  for(int i=0;i<n;i++){
    int id,l,r;
    scanf("%d %d %d",&id,&l,&r);
    if(l!=NIL){
      T[id].left=l; T[l].parent=id;
    }
    if(r!=NIL){
      T[id].right=r; T[r].parent=id;
    }
  }
  for(int id=0;id<n;id++){
    printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d, "
    ,id,T[id].parent,getSib(id),getDegree(id),getDepth(id),getHeight(id));
    cout << getType(id) << endl;
  }
}