#include<stdio.h>
#define M 200000

typedef struct{
  int id;
  int k;
  int c[20];
  int p;
  int l;
  int r;
  int dep;
}Node;

Node T[M];

void depth(int,int);

int main(){
  int n,i,j;
  
  scanf("%d",&n);
  for(i=0;i<n;i++){
   T[i].p=-1;
   T[i].l=-1;
  }
  for(i=0;i<n;i++){
    scanf("%d",&T[i].id);

    scanf("%d",&T[T[i].id].k);

    for(j=0;j<T[T[i].id].k;j++){

      scanf("%d",&T[T[i].id].c[j]);

      T[T[T[i].id].c[j]].p= T[i].id;
      T[T[i].id].l=T[T[i].id].c[0];
    }
  }
  for(i=0;i<n;i++){
    if(T[T[i].id].p==-1) T[T[i].id].dep=0;
    depth(T[i].id,T[T[i].id].dep);
  } 

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

void depth(int id,int count){
  int j;
  T[id].dep=count;
  if(T[id].l==-1)return;

  else for(j=0;j<T[id].k;j++){
      depth(T[id].c[j],T[id].dep+1);
	    }
}