#include<stdio.h>
#define MAX 100000
#define NOT -1
struct Node {int pa, le, ri;};
struct Node T[MAX];
int D[MAX];
int j,c;
//depth
int recDepth(int u,int p){
  D[u]=p;
  if(T[u].ri!=NOT)recDepth(T[u].ri,p);
  if(T[u].le!=NOT)recDepth(T[u].le,p+1);
}
//print
void print(int u){
  printf("node %d: parent =  %d, depth = %d, ",u,T[u].pa,D[u]);
  if(T[u].pa==NOT)printf("root, ");
  else if(T[u].le==NOT) printf("leaf, ");
  else printf("internal node");
  
  printf("[");
  for(j=0,c=T[u].le;c!=NOT;j++,c=T[c].ri){
    if(j)printf(", ");
      printf("%d",c); 
  }
    printf("]\n");
}
int main(){
  int node,n,cou=0,i,degree,x,y,r;
  scanf("%d",&n);
  for(i=0;i<n;i++)T[i].pa=T[i].le=T[i].ri=NOT;
  
  for(j=0;j<n;j++){
    scanf("%d",&node);
    scanf("%d",&degree);
    
    for(i=0;i<degree;i++){
      scanf("%d",&c);
      if(i==0)T[node].le=c;
      else T[x].ri=c;
      x=c;
      T[c].pa=node;
    }
  }
  for(i=0;i<n;i++){
    if(T[i].pa==NOT)r=i;
  }
  recDepth(r,0);
  
  for(i=0;i<n;i++)print(i);
  return 0;
}