#include <stdio.h>
#include <stdlib.h>
#define N 100000
#define M 1000

int parentSearch(int);
int depthSearch(int); 
char *Treejudge(int);

int n,node;
int k[N];
int c[M][M];
int parent[N];
int depth[N];
char *Tree[N];

int main(){
  int i,j;

  scanf("%d",&n);
 

  for(i=0 ; i<n ; i++){
    scanf("%d",&node);
    scanf("%d",&k[node]);
    for(j=0 ; j<k[node] ; j++){
      scanf("%d",&c[node][j]);
    }
  }

  for(i=0 ; i<n ; i++){
    parent[i]=parentSearch(i);
  }
  for(i=0 ; i<n ; i++){
    depth[i]=depthSearch(parent[i]); 
  }
  for(i=0 ; i<n ; i++){
    Tree[i]=Treejudge(i);
  }


    for(i=0 ; i<n ; i++){
      printf("node %d: parent = %d, depth = %d, %s, ",i,parent[i],depth[i],Tree[i]);
      printf("[");
      for(j=0 ; j<k[i] ; j++){
	printf("%d",c[i][j]);
	if(j==k[i]-1)break;
	printf(", ");
      }
      printf("]\n");
    }

      return 0;
}
    
int parentSearch(int Node){
  int i,j;
  for(i=0 ; i<n ; i++){
    for(j=0 ; j<k[i] ; j++){
      if(Node==c[i][j])return i;
    }
  }
  return -1;
}

int depthSearch(int Nodeparent){
  int i,depth=0;
  
  for(i=0 ; i<n ; i++){
    if(Nodeparent == i){
      depth++;
      Nodeparent = parent[i];
      i=-1;
    }
  }
  return depth;
}

char *Treejudge(int Node){
  int i;
  if(parent[Node]==-1)return "root";
  
  for(i=0 ; i<n ; i++){
    if(Node==parent[i])return "internal node";
  }
  return "leaf";
}