#include<stdio.h>

#define MAX 200000

#define N -1

struct treeNode{
  int p;
  int l;
  int r;
};

struct treeNode T[MAX];

int doKansu(int);

void doKansu2(int);

int n,H,D[MAX];  
 
int 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 = N;
    }
 
  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] = doKansu(i);
    }
  
  for(i = 0;i < n;i ++)
    {
      doKansu2(i);
    }
  
  return 0;
}

int doKansu(int u){

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

  int i = 0;
  int 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");
  }
}