#include<stdio.h>

#define MAX 100000

typedef struct{
  int p;
  int l_child;
  int r_sibling;
} node;

  int depth[MAX];
  node T[MAX];

void getDepth(int,int);

int main(){
  int c,i,j,k,n,r,id,prec;
    
  scanf("%d",&n);

  for(i=0;i<n;i++) T[i].p=T[i].l_child=T[i].r_sibling=-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].l_child=c;
      else T[prec].r_sibling=c;
      prec=c;
      T[c].p=id;
    }
  }

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

  getDepth(r,0);

  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, [");
      for( j=T[i].l_child; j!=-1; j=T[j].r_sibling){
	printf("%d",j);
	if(T[j].r_sibling!=-1) printf(", ");
      }
      printf("]\n");
    }

    else if(T[i].l_child!=-1){
      printf("internal node, [");
      for( j=T[i].l_child; j!=-1; j=T[j].r_sibling){
	printf("%d",j);
	if(T[j].r_sibling!=-1) printf(", ");
      }
      printf("]\n");
    }

    else printf("leaf, []\n");
  }

  return 0;
}

void getDepth(int u,int p){
  depth[u]=p;
  if(T[u].r_sibling!=-1) getDepth(T[u].r_sibling,p);
  if(T[u].l_child!=-1) getDepth(T[u].l_child,p+1);
}

