/* A Rooted Trees */

#include<stdio.h>
#define NIL -1

int main(){
  int i, j;
  int n, id, k;
  int temp2;
  int d=0;

  scanf("%d",&n);

  int C[n][3];  /*C[n][0]=P, C[n][1]=L(left child), C[n][2]=R(right sibling)*/

  /* initialize C[n][3]*/
  for(i=0;i<n;i++){
    for(j=0;j<3;j++){
      C[i][j]=NIL;
    }
  }

  for(i=0;i<n;i++){
    scanf("%d %d",&id,&k);
    if(k>0){
      int temp[k];
      for(j=0;j<k;j++){
	if(j==0){
	  scanf("%d",&temp[0]);
	  C[id][1]=temp[0];
	  C[temp[0]][0]=id;
	}else{
	  scanf("%d",&temp[j]);
	  C[temp[j-1]][2]=temp[j];
	  C[temp[j]][0]=id;
	}
      }
    }
  }
  for(i=0;i<n;i++){
    printf("node %d: ",i);
    printf("parent = %d, ",C[i][0]);

    /*search parent*/
    temp2=C[i][0];
    if(temp2!=NIL){
      while(1){
	if(C[temp2][0]==NIL){
	  d++;
	  break;
	}
	else{ 
	  temp2=C[temp2][0];
	  d++;
	}
      }
    }
    printf("depth = %d, ",d);
    d=0;
    
    if(C[i][0]==NIL){
      printf("root, [  ");
    }else if(C[i][1]==NIL){
      printf("leaf, []\n");
      continue;
    }else{
      printf("internal node, [");
    }

    /*search child*/
    if(C[i][1]!=NIL){
      printf("%d, ",C[i][1]);
      temp2=C[i][1];
      while(1){
	if(C[temp2][2]!=NIL){
	  printf("%d, ",C[temp2][2]);
	  temp2=C[temp2][2];
	  //if(C[temp2][2]!=NIL)printf(", ");
	}else break;
      }
    }
    printf("\b\b]\n");
  }
  return 0;
}