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

#define MAX 100004
#define NIL -1

struct Node{
  int p;
  int num;
  int depth;
  int* child;
};

struct Node T[MAX];



void depth(int d,int dep){
  T[d].depth=dep;
  int i;
  for(i=0;i<T[d].num;i++){
    depth(T[d].child[i],dep+1);
  }
}

void print(int q){

  int i;
  printf("node %d: ",q);

  printf("parent = %d, ",T[q].p);

  printf("depth = %d, ",T[q].depth);


  if(T[q].p==NIL){
    printf("root,[%d",T[q].child[0]);
    for(i=1;i<T[q].num;i++){
	printf(", %d",T[q].child[i]);
      }
    printf("]\n");
    }

  if(T[q].p!=NIL && T[q].num!=0){
    printf("internal node, [%d",T[q].child[0]);
    for(i=1;i<T[q].num;i++){
      printf(", %d",T[q].child[i]);
    }
    printf("]\n");
  }

  else if(T[q].num==0){
    printf("leaf, []\n");
  }
}
 
int main(){
  int i,j,n,nn,z,c,b,a;

  scanf("%d",&n);

  for(i=0;i<n;i++)
    T[i].p=-1;

  for(i=0;i<n;i++){
    scanf("%d%d",&nn,&z);
    T[nn].num=z;
    T[nn].child = (int*)malloc( z * sizeof(int) );

    for(j=0;j<z;j++){
      scanf("%d",&T[nn].child[j]);
      T[ T[nn].child[j] ].p=nn;
    }
  }

  int root=0;
  for(i=0;i<n;i++)
    if(T[i].p==-1)root=i;

  depth(root,0);

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