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

struct Node
{
  int p,q,r;
};

struct Node T[MAX];

int n,m,D[MAX];

int getdepth(int u){
  int d = 0;
  while(T[u].p!=NIL){
    u = T[u].p;
    d++;
  }
  return d;
}

void print(int u)
{
  int i,A;

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

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

  printf("[");

  for(i=0,A=T[u].q; A!=NIL; i++,A=T[A].r){
    if(i) printf(", ");

    printf("%d",A);
  }
  printf("]");
  printf("\n");
}

int main()
{
  int i,j,d,v,A,q;

  scanf("%d",&n);
  for(i=0; i<n; i++){
    T[i].p = NIL;
    T[i].q = NIL;
    T[i].r = NIL;
  }

  for(i=0; i<n; i++){
    scanf("%d%d",&v,&d);
    for(j=0; j<d; j++){
      scanf("%d",&A);
      if(j == 0)
        T[v].q = A;
      else
        T[q].r = A;

      q = A;
      T[A].p = v;
    }
  }

  m = 0;

  for(i=0; i<n; i++){
    D[i] = getdepth(i);
    if(D[i] > m)
      m = D[i];
  }

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

  return 0;
}
