#include<stdio.h>

#define leaf 1
#define root 2
#define internalnode 3

struct node{
  int id;
  int cn;
  int c[1000];
  int type;
  int parent;
  int depth;
};

int main(){
  int n,i,j,k,parent=0,depth=0;
  scanf("%d",&n);
  struct node T[n];
  for(i=0;i<n;i++){
    scanf("%d%d",&T[i].id,&T[i].cn);
    if(T[i].cn!=0){
      for(j=0;j<T[i].cn;j++){
	scanf("%d",&T[i].c[j]);
      }
    }
    else T[i].type=leaf;
  }

  for(i=0;i<n;i++){
    parent=0;
    for(j=0;j<n;j++){
      for(k=0;k<T[j].cn;k++){
	if(T[i].id==T[j].c[k]){
	  T[i].parent=T[j].id;
	  parent++;
	  T[i].depth=T[j].depth+1; 
	}	
      }
    }
    if(parent==0){
      T[i].parent=-1;
      T[i].depth=0;
      T[i].type=root;
    }
  }
  for(i=0;i<n;i++){
    if(T[i].type!=leaf && T[i].type!=root)
      T[i].type=internalnode;
  }
  for(i=0;i<n;i++){
    for(k=0;k<n;k++){
      if(i==T[k].id){
	printf("node %d: parent = %d, depth = %d, ",T[k].id,T[k].parent,T[k].depth);
	if(T[k].type==root){
	  printf("root, ");
	}
	else if(T[k].type==internalnode){
	  printf("internal node, ");
	}
	else printf("leaf, ");
	printf("[");
	if(T[k].cn!=0){
	  for(j=0;j<T[k].cn;j++){
	    if(j<T[k].cn-1)
	      printf("%d, ",T[k].c[j]);
	    else printf("%d",T[k].c[j]);
	  }
	}
	printf("]\n");
      }
    }
  }
   
  return 0;
}



