#include<stdio.h>
#define MAX 100005
#define NIL -1

struct Node{int p,l,r;};
struct Node T[MAX];
int n,H,D[MAX];

int getDepth(int u){
  int d = 0;
  while(T[u].p != -1){
    u = T[u].p;
    d++;
  }

  return d;

}

void print(int u){
  int i=0,count = 0;
  printf("node %d: parent = %d, depth = %d, ",u,T[u].p,D[u]);
  if(T[u].p == -1){
    printf("root, [");
    if(T[u].l != -1 ){
      printf("%d",T[u].l);
      if(T[u].r != -1) printf(", %d",T[u].r);
      for (i=0; i<n; i++){
	if(T[i].p==u && T[u].l!=i && T[u].r!=i){
	  printf(", %d",i);
	}       
      }
    }
    printf("]\n");
  }
  
  else{
    if(T[u].l != -1){
      printf("internal node, [%d",T[u].l);    
      if(T[u].r != -1 ){
	printf(", %d",T[u].r);

	for (i=0; i<n; i++){
	  if(T[i].p==u && T[u].l!=i && T[u].r!=i){
	    printf(", %d",i);
	  }
	}
      }
      printf("]\n");
    }
    else printf("leaf, []\n");
  }
}

  

main(){
  int i,j,d,v,c,l;

  scanf("%d",&n);

  for (i=0; i<n; i++) {
    T[i].p = T[i].l = T[i].r = NIL;
  }

  for (i=0; i<n; i++){
    scanf("%d %d",&v,&d);
    for (j=0; j<d; j++){
      scanf("%d",&c);
      if(j == 0){
	T[v].l = c;
	T[c].p = v;
      }
      else if(j == 1){
	T[v].r = c;
	T[c].p = v;
      }
      else T[c].p = v;
    }
  }

  for (i=0; i<n; i++){
    D[i] = getDepth(i);
  }

  for (i=0; i<n; i++) print(i);
  return 0;
}