#include<stdio.h>

#define MAX 100000
#define NIL -1

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

struct Node T[MAX];
int n,D[MAX];

void print(int u){
  int i,c;
  printf("node %d: ",u);
  printf("parent = %d, ",T[u].p);
  printf("depth = %d, ",D[u]);

  if(T[u].p == NIL) {
    printf("root,");
  }else if(T[u].l == NIL){
    printf("leaf,");
  } else {
    printf("internal node,");
  }
  printf(" [");

  for(i = 0,c = T[u].l;c !=NIL;i++,c = T[c].r){
    if(i>0) printf(", ");
    printf("%d",c);
  }
  printf("]\n");
}
void rec(int node, int depth){
  D[node]=depth;
  if(T[node].r!=NIL) rec(T[node].r,depth);
  if(T[node].l!=NIL) rec(T[node].l,(depth+1));
}

int main(){
  int i,u,j,k,a,m,root;

  scanf("%d",&n);

  for(i=0;i<n;i++) T[i].p = T[i].l = T[i].r = NIL;

  for(i=0;i<n;i++){
    scanf("%d%d",&u,&j);
    for(k=0;k<j;k++){
      scanf("%d",&a);
      if(k==0) T[u].l=a;
      else T[m].r=a;
      m=a;
      T[a].p=u;
    }
  }

  for(i=0;i<n;i++){
    if(T[i].p==NIL) root=i;
  }
  rec(root,0);
  for(i=0;i<n;i++) print(i);

  return 0;
}

