#include<stdio.h>

#define MAX 100005
#define NIL -1

struct Node{
  int parent;
  int left;
  int right;
};

struct Node gNode[MAX];
int gDepth[MAX];

void print(int node){
  int i,left;
  
  printf("node %d: ",node);
  printf("parent = %d, ",gNode[node].parent);
  printf("depth = %d, ",gDepth[node]);

  if(gNode[node].parent==NIL) printf("root, ");
  else if(gNode[node].left==NIL) printf("leaf, ");
  else printf("internal node, ");

  printf("[");
  
  left=gNode[node].left;
    
  for(i=0;left!=NIL;i++){
    if(i!=0) printf(", ");

    printf("%d",left);
    left=gNode[left].right;
  }

  printf("]\n");
}

void rec(int node,int parent){
  gDepth[node]=parent;
  
  if(gNode[node].right!=NIL){
    rec(gNode[node].right,parent);
  }

  if(gNode[node].left!=NIL){
    rec(gNode[node].left,parent+1);
  }
}

int main(){
  int num,id,node,left,root,n,i,j;

  scanf("%d",&n);

  for(i=0;i<n;i++){
    gNode[i].parent=gNode[i].left=gNode[i].right=NIL;
  }

  for(i=0;i<n;i++){
    scanf("%d%d",&id,&num);

    for(j=0;j<num;j++){
      scanf("%d",&node);

      if(j==0) gNode[id].left=node;
      else gNode[left].right=node;

      left=node;
      gNode[node].parent=id;
    }
  }

  for(i=0;i<n;i++){
    if(gNode[i].parent==NIL) root=i;
  }

  rec(root,0);

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

  return 0;
}

