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

struct NODE{
  int id,k,p,depth;
  int *next;
  char *type;
};

struct NODE *root;
int n;
void makedepth(struct NODE);
int main(){
  int i,j,l,m;
  struct NODE temp;
  scanf("%d",&n);
  root=(struct NODE *)malloc(sizeof(struct NODE)*n);
  for(i=0;i<n;i++){
    root[i].p=-1;
    root[i].depth=0;
  }
  for(i=0;i<n;i++){
    scanf("%d",&root[i].id);
    scanf("%d",&root[i].k);
    root[i].next=malloc(sizeof(int)*root[i].k);
      for(j=0;j<root[i].k;j++){
	scanf("%d",&m);
	root[i].next[j]=m;
      }
    }
  
  for(i=0;i<n;i++){
    for(j=0;j<n;j++){
      for(l=0;l<root[i].k;l++){
	if(root[i].next[l]==root[j].id)root[j].p=root[i].id;
      }
    }
  }
  for(i=0;i<n;i++){
    
    if(root[i].p==-1)makedepth(root[i]);
    
  }
  for(i=0;i<n;i++){
    for(j=n-1; j>i; j--){
      if(root[j].id < root[j-1].id){
        temp = root[j];
        root[j] = root[j-1];
        root[j-1] = temp;
      }
    }

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

void makedepth(struct NODE Root){
  int i;
  for(i=0;i<n;i++){
    if(Root.id==root[i].p){
      root[i].depth=Root.depth+1;
      if(root[i].k!=0)makedepth(root[i]);
    }
  }
}

