#include<stdio.h>
#define MAX 100000
#define NIL -1
 
struct Node{ 
int p,l,r;
};
struct Node T[MAX];
int n,D[MAX];
void getDepth(int);
int main(){
  int i,j,d,v,c,l,r,a;

  scanf("%d", &n);
 
  for (i=0;i<=n-1;i++){
    T[i].p=T[i].l=T[i].r=NIL;
  }
 
  for (i=0;i<=n-1;i++){
    scanf("%d %d",&v,&d);
    for (j=0;j<d;j++){
      scanf("%d", &c);
      T[c].p=v;
      if(j==0){
	T[v].l=c;
      }      
      else{
	T[l].r=c;
      }
      l=c;
      T[c].p=v;
    }
  }
  for (i=0;i<=n-1;i++){
    if(T[i].p==NIL){
      D[i]=0; 
      getDepth(i); 
      break;
    }
  }
 
  for (i=0;i<=n-1;i++){
    printf("node %d: parent = %d, depth = %d,",i,T[i].p,D[i]);
    if(i==0){
      printf(" root, [");
    }
    else if(T[i].l==NIL){
      printf(" leaf, [");
    }
    else{
      printf(" internal node, [");
    }
    a=i;
    if(T[a].l!=NIL){ 
      printf("%d",T[a].l);   
      if(T[T[a].l].r==NIL){
	printf("]\n");
      }
      else{
	printf(", ");
      }
      a=T[a].l;
      while(T[a].r!=NIL){
	printf("%d",T[a].r);
	if(T[T[a].r].r==NIL){
	  printf("]\n");
	}
	else{
	  printf(", ");
	}
	a=T[a].r;
      }
    }
    else puts("]");
  
  }
  return 0;
}

void getDepth(int u){
  int d = 0;
  if(T[u].r!=NIL){
    D[T[u].r]=D[u];
    getDepth(T[u].r);
  }
  if(T[u].l!=NIL){ 
    D[T[u].l]=D[u]+1;
    getDepth(T[u].l);
  }
}