#include<stdio.h>
#include<stdlib.h>

#define MAX 100000

typedef struct {
  int p, k, dep;
  int *l;
} Node;

int main(){
  int i, j, n, id;
  Node T[MAX], tmp;

  scanf("%d",&n);
  for(i = 0; i < n; i++){
    T[i].p = -1;
    T[i].dep = 0;
  }
  for(i = 0; i < n; i++){
    scanf("%d",&id);
    scanf("%d",&T[id].k);
    T[id].l = (int *)malloc(sizeof(int) * T[id].k);
    for(j = 0; j < T[id].k; j++){
      scanf("%d",&T[id].l[j]);
      T[T[id].l[j]].p = id;
    }    
  }

  for(i = 0; i < n; i++){
    tmp = T[i];
    while(1){
      if(tmp.p == -1) break;
      T[i].dep++;
      tmp = T[tmp.p];
	}  
  }


  for(i = 0; i < n; i++){
    if(T[i].dep == 0){
      printf("node %d: parent = %d, depth = %d, root, [", i, T[i].p, T[i].dep);
      
      for(j = 0; j < T[i].k-1; j++){
	printf("%d, ", T[i].l[j]);
      }
 
      if(T[i].k != 0) printf("%d]\n",T[i].l[j]);
      else printf("]\n");
    }
    else if(T[i].k != 0 && T[i].p != -1){
      printf("node %d: parent = %d, depth = %d, internal node, [", i, T[i].p, T[i].dep);
      for(j = 0; j < T[i].k - 1; j++){
	printf("%d, ", T[i].l[j]);
      }
      printf("%d]\n",T[i].l[j]);
    }
    else if(T[i].k == 0){
      printf("node %d: parent = %d, depth = %d, leaf, []\n", i, T[i].p,  T[i].dep);
    }
  }

  return 0;

}