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

int getDepth(int);
void setDepth(int, int);
void printChildren(int);
void print(int);

struct Node{
  int parent;
  int left;
  int right;
};

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

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

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

  setDepth(r, 0);

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

int getDepth(int u)
{
  int d = 0;

  while(T[u].parent != NIL){
    u = T[u].parent;
    d++;
  }
  return d;
}

void setDepth(int u, int p)
{
  D[u] = p;
  if(T[u].right != NIL){
    setDepth(T[u].right, p);
  }
  if(T[u].left != NIL){
    setDepth(T[u].left, p+1);
  }
} 

void printChildren(int u)
{
  int c;
  
  c = T[u].left;
  while(c != NIL){
    print(c);
    c = T[u].right;
  }
}

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

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

  if(T[u].parent == NIL)printf("root, ");
  else if(T[u].left == NIL)printf("leaf, ");
  else printf("internal node, ");

  printf("[");

  for(i = 0, c = T[u].left; c != NIL; i++, c = T[c].right){
    if(i)printf(", ");
    printf("%d",c);
  }
  printf("]\n");
}

