#include<stdio.h>
#define M 200000
#define N 10000
struct Node{
  int p,q,c;
};
struct Node T[M];
int getdepth(int);
int main(){
  int n,i,k,id,c,key,depth[M],j;
  scanf("%d",&n);
  for(i=0;i<n;i++){
    T[i].p=T[i].c=T[i].q=-1;
  }
  for(i=0;i<n;i++){
    scanf("%d%d",&id,&k);
    for(j=0;j<k;j++){
      scanf("%d",&c);
      if(j==0){
	T[id].c=c;
	T[c].p=id;
	key=c;
      }
      else{
	T[key].q=c;
	T[c].p=id;
	key=c;
      }
    }
  }
  for(i=0;i<n;i++){
    depth[i]=getdepth(i);
  }
  for(i=0;i<n;i++){
    printf("node %d: parent = %d, depth = %d, ",i,T[i].p,depth[i]);
    if(T[i].p==-1){
      printf("root, [");
      if(T[i].c!=-1){
	printf("%d",T[i].c);
	key=T[i].c;
	while(1){
	  if(T[key].q==-1) break;
	  printf(", %d",T[key].q);
	  key=T[key].q;
	}
      }
    }
    else if(T[i].c==-1){
      printf("leaf, [");
    }
    else{
      printf("internal node, [");
      if(T[i].c!=-1){
	printf("%d",T[i].c);
	key=T[i].c;
	while(1){
	  if(T[key].q==-1) break;
	  printf(", %d",T[key].q);
	  key=T[key].q;
	}
      }
    }
     printf("]\n");
  }
  return 0;
}

  int getdepth(int n){
  if(T[n].p==-1) return 0;
  return getdepth(T[n].p)+1;
}

      
      
      

