#include<stdio.h>
#define MAX 25
typedef struct node{
  int p;//parents
  int left;
  int right;
  int sib;
}Node;
void depth(int,int);
Node node[MAX];//nodeの大きさ
int D[MAX];
int main(){
  int n,i,num,j,tmp;
 scanf("%d",&n);//節の入力
  for(i=0;i<n;i++){//初期化
    node[i].p=-1;
    node[i].left=-1;
    node[i].right=-1;
    node[i].sib=-1;
  }
  for(i=0;i<n;i++){
    scanf("%d",&num);
    for(j=0;j<2;j++){
      scanf("%d",&tmp);
      if(j==0){
	node[num].left=tmp;
      }
      else{
	
	if(node[num].left!=-1){//左側の要素が存在するとき
	  node[num].right=tmp;
	  node[node[num].left].sib=node[num].right;
	}
	if(node[num].right!=-1){//右側の要素が存在するとき
	  node[num].right=tmp;
	  node[node[num].right].sib=node[num].left;
	}

	
      }
      if(tmp!=-1){
      node[tmp].p=num;
      }
    }
    
  }
for(i=0;i<n;i++){
    if(node[i].p==-1){
      depth(i,0);
    }
 }

  
   for(i=0;i<n;i++){
     printf("node %d: parent = %d, sibling = %d, depth = %d\n",i,node[i].p,node[i].sib,D[i]);
   }
   return 0;
}
void depth(int u,int p){
  D[u]=p;
  if(node[u].left!=-1){
    depth(node[u].left,p+1);
  }
  if(node[u].right!=-1){
    depth(node[u].right,p+1);
  }
}

