#include<stdio.h>

#define MAX 100004
#define NIL -1

struct Node{
  int p,l,r;
};

struct Node T[MAX];

int dep=1;

int depth(int d){
  if(T[d].p==NIL) return 0;
  if(T[T[d].p].p!=NIL){
    dep++;
    depth(T[d].p);
  }
  return dep;
}

void print(int q){
  int i;
  printf("node %d: ",q);
  printf("parent = %d, ",T[q].p);
  printf("depth = %d, ",depth(q));

  if(T[q].p==NIL){
    printf("root, [");
    if(T[q].l!=NIL){
      printf("%d",T[q].l);
      while(T[T[q].l].r!=NIL){
	printf(", %d",T[T[q].l].r);
	T[q].l=T[T[q].l].r;
      }
    }
    printf("]\n");
  }

  else if(T[q].p!=NIL && T[q].l!=NIL){
    printf("intenal node, [%d",T[q].l);
    while(T[T[q].l].r!=NIL){
      printf(", %d",T[T[q].l].r);
      T[q].l+T[T[q].l].r;
    }
    printf("]\n");
  }

  else if(T[q].l==NIL){
    printf("leaf, []\n");
  }
}
 

main(){
  int i,j,n,nn,z,c,b,a;

  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",&nn,&z);
    for(j=0;j<z;j++){
      scanf("%d",&c);

      if(j==0){
	T[c].p=nn;
	T[nn].l=c;
	a=c;
      }
      else{
	T[c].p=nn;
	T[a].r=c;
	a=c;
      }
    }
  }
  for(i=0;i<n;i++) print(i);
  return 0;
}