#include <stdio.h>
#include <stdlib.h>

#define N 100000

typedef struct{
  int id,p,d,leaf,k,pk;
  int *type;
}Node;

Node node[N]={0};

void check_d(int,int);

int main(){
  int n,i,j,in_id,k,in,now,root;
  scanf("%d",&n);
  for(i=0; i<n; i++){
    node[i].p=-1;
  }
  for(i=0; i<n; i++){
    scanf("%d",&in_id);
    node[in_id].id=in_id;
    scanf("%d",&k);
node[in_id].type=malloc(sizeof(int)*k);

    if(k==0) node[in_id].leaf=1;
    node[in_id].k=k;
    for(j=0; j<k; j++){
      scanf("%d",&in);
      node[in_id].type[j]=in;
      node[in].p=in_id;
    }
  }

  for(i=0; i<n; i++){
    //printf("%d %d\n",node[i].pk,node[i].k);
    if(node[i].p==-1){
      root=i;
      break;
    }
  }
  
  check_d(root,0);

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

void check_d(int now_id,int now_d){
  //printf("DEBUG %d %d\n",now_id,node[now_id].k);
  if(node[now_id].leaf==1){
    node[now_id].d=now_d;
    return;
  }else{
    while(node[now_id].pk<node[now_id].k){
      check_d(node[now_id].type[node[now_id].pk],now_d+1);
      node[now_id].pk++;
    }
    node[now_id].d=now_d;
  }
}

