#include<stdio.h>
#define N 100000

typedef struct {
  int id,k,p,depth;
  int child[10];
} Node;

void scan(void);
void desideDepth(int,int);

Node t[N];
int n=0;

int main(){

  int i,j;

  scan();
  // fprintf(stderr,"Check!\n");
 
  /*for(i=0;i<n;i++){
    printf("node %d: parent = %d\n",i,t[i].p);
  }
 */
  for(i=0;i<n;i++){
    printf("node %d: parent = %d, depth = %d,",i,t[i].p,t[i].depth);
    
    if(t[i].k==0){
      if(t[i].depth==0){
	printf(" root, []\n");
      }else {
	printf(" leaf, []\n");
      }
    } else if(t[i].k!=0){
      if(t[i].depth==0){
	printf(" root, [");
	for(j=0;j<t[i].k;j++){
	  if(j>0){
	    printf(", ");
	  }
	  printf("%d",t[i].child[j]);
	}
	printf("]\n");
      } else {
	printf(" internal node, [");
	for(j=0;j<t[i].k;j++){
	  if(j>0){
	    printf(", ");
	  }
	  printf("%d",t[i].child[j]);
	}
	printf("]\n"); 
      }
    }
  } 
  return 0;
  
}
void scan(void){
  
  int i,j;
  
  scanf("%d",&n);
  for(i = 0; i < n; i++){
    scanf("%d %d",&t[i].id,&t[i].k);
    if(t[i].k != 0){
      if(t[0].id == 0){
	t[0].p=-1;
      }
      for(j=0;j<t[i].k;j++){
	scanf("%d",&t[i].child[j]);
	t[t[i].child[j]].p = t[i].id;	
      }
    }else{
      if(t[i].p==NULL){
	t[i].p = -1;
      }
    }
   
    desideDepth(t[i].p,i);
    
  }
  
}

void desideDepth(int parent,int nodeNumber){
  //fprintf(stderr,"Check!\n");
  if(parent != -1){
    t[nodeNumber].depth++; 

    desideDepth(t[parent].p,nodeNumber);
  } 
 
 
  
}