#include <stdio.h>
#define MAX 100000
struct Node{
  int depth,p;
};
Node cdepth[MAX];
Node getdepth(struct Node);
int main(){ 
  int zi[MAX],arr,num,child[MAX][MAX],mode[MAX],i,j,k,parent[MAX],depth[MAX];
  Node T[MAX];
  scanf("%d",&num); /*numはのーどの数*/
  for(i=0;i<num;i++){
    scanf("%d",&arr); /*node"arr"について記述*/
  scanf("%d",&zi[arr]);
  for(j=0;j<zi[arr];j++){
    scanf("%d",child[i][j]);/*idがiののーどの子供はjを次数分やる*/
  }
  }
    /*ここからぶんせき*/

    for(i=0;i<num;i++){
      mode[i]=1;
      if(zi[i]==0)
	mode[i]=0; /*mode[ID];0なら葉、1なら枝、2なら根*/
      parent[i]=-1;
	for(j=0;j<num;j++){
	    if(child[j][0]==i)
	      T[i].p=j
	}
	if(parent[i]==-1)
	  mode[i]=2;
    }
    for(i=0;i<num;i++){
      getdepth(T[i].p);
      depth[i]=cdepth;
      cdepth=0;
    }
    for(i=0;i<num;i++){
      printf("node %d: parent = %d, depth = %d, ",i,T[i].p,depth[i]);
      if(mode[i]==0)
	printf("leaf, [");
      else if(mode[i]==1)
	printf("internal node, [");
      else if(mode[i]==2)
	printf("root, [");
      if(zi!=0){
      for(j=0;j<zi[i]-1;j++){
	printf("%d, ",child[i][j]);
      }
      printf("%d]"child[i][zi[i]-1]);
      }
      else printf("[]")
	     printf("\n");
    }
      return 0;
}


      Node  getdepth(struct node d){
 if(d.p!=-1){
   cdepth++;
	return getdepth(T[i].p);
 }
 else 
return cdepth;
      }