#include<stdio.h>
#include<stdlib.h>

typedef struct{
  int id;
  int parent;
  int degree;
  int *child;
  int depth;
}Tree;



int main(){
  Tree T[100000];
  int n, i, j, k, c=0;

  scanf("%d",&n);
  if( n<1 || 100000<n ){
    exit(0);
  }
  
  for( i=0 ; i<n ; i++ ){
    T[i].id = i;
    T[i].parent = -1;
  }
       
  for( i=0 ; i<n ; i++ ){
    scanf("%d",&k);
    	  
    scanf("%d",&T[k].degree);
    
    if( T[k].degree != 0 ){
      T[k].child = (int *)malloc(sizeof(int) * T[k].degree);
      
      for( j=0 ; j<T[k].degree ; j++ ){
	scanf("%d",&T[k].child[j]);
	T[T[k].child[j]].parent = k;
      }
    }
  }

  for( i=0 ; i<n ; i++ ){
    if( T[i].parent == -1){
      T[i].depth = 0;
      break;	
    }
  }

  for( i=0 ; i<n ; i++ ){
    c=0;
    k=i;

    while( k != -1 ){
      k = T[k].parent;
      c++;
    }
    T[i].depth = c-1;
  }

  for( i=0 ; i<n ; i++ ){
    printf("node %d: parent = %d, depth = %d, ", T[i].id, T[i].parent, T[i].depth);

    if(T[i].depth == 0){
      printf("root, ");
    }
    else{
      if(T[i].degree == 0){
	printf("leaf, ");
      }
      else{
	printf("internal node, ");
      }
    }

    printf("[");
    for( j=0 ; j<T[i].degree ; j++ ){
      if(j == T[i].degree-1){
	printf("%d",T[i].child[j]);
	free(T[i].child);
      }
      else{
	printf("%d, ",T[i].child[j]);
      }
    }
    printf("]\n");
  }

  return 0;
}
		       
  