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

struct Node{
  int parent;
  int left;
  int right;
};
struct Node T[N];
int n, depth[N], h;
int setDepth(int );
void print(int );
int main(){
  int i, j, id, k, c, left, right;
  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++){
    scanf("%d", &id);
    scanf("%d", &k);
    for(j=0; j<k; j++){
      scanf("%d", &c);
      if(j==0){
	      T[id].left = c;
      }
      else{
	      T[left].right = c;
      }
      left = c;
      T[c].parent = id;
    }
  }

  for( i = 0; i < n; i++) {
    depth[i] = setDepth(i);
    if ( depth[i] > h ){
      h = depth[i];
    } 
  }
  for( i = 0; i < n; i++){
    print(i);
  }
  return 0; 
}

int setDepth(int id){
  int i;
  for(i = 0; T[id].parent != NIL; i++){
    id = T[id].parent;
  }
  return i;
}

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

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