#include<stdio.h>
#include<stdlib.h>
#define MAX 100000
#define NIL -1


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

struct node T[MAX];
int n,D[MAX];
int setdepth(int ,int );

void printchildren(int);

int main(){

  int id,k,j,i,a,r,l;
 
  scanf("%d",&n); 
  for(i=0;i<n;i++){
    T[i].parent=NIL;
    T[i].left=NIL;
    T[i].right=NIL;
  }
  
  for(i=0;i<n;i++){
    l = 0;
    scanf("%d",&id);
    scanf("%d",&k);
    for(j=0;j<k;j++){
      scanf("%d",&a);
      if(j==0) T[id].left=a;
      else T[l].right=a;
      l = a;
      T[a].parent=id;
    }

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

  }
  setdepth(r,0);

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


int setdepth(int u,int p){

  D[u] = p;
  if(T[u].right != NIL){
    setdepth(T[u].right,p);
  }
  if(T[u].left != NIL){
    setdepth(T[u].left,p+1);
  }



  return p;
   }

void printchildren(int u){
  int c,i;

    printf("node %d: ",u);
    printf("parent = %d, ",T[u].parent);
    printf("depth = %d, ",D[u]);

    if(T[u].parent == NIL) printf("root, ");
    else if(T[u].left == NIL) printf("leaf, ");
    else printf("internal node, ");
    printf("[");
    c=T[u].left;
    for(i=0;c!=NIL;i++){
      printf("%d",c);
      if(T[c].right!=NIL) printf(", ");
      c=T[c].right;
      
        
    }
    printf("]");
    printf("\n");
      
}



