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

typedef struct {
  int p, l, r;
}Tree;

Tree T[100000];
int n, s[100000];

void func1(int);
int func2(int);


int main(){
  int i, j;
  int d, v, c, l, r;

  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", &v, &d);
    for(j = 0 ; j < d ; j++){
      scanf("%d", &c);
      if(j == 0) T[v].l = c;
      else T[l].r = c;
      l = c;
      T[c].p = v;
    }
  }

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

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

void func1(int i){
  int j, m;

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

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


  if(T[i].l != NIL){
            printf("%d",T[i].l);
            m = T[i].l;
            while(1){
                if(T[m].r == NIL) break;
                printf(", %d", T[m].r);
                m = T[m].r;
            }
        }
  printf("]\n");
}

int func2(int i){
  if(T[i].p == NIL) return 0;
  return func2(T[i].p) + 1;
}

