#include<cstdio>
#include<iostream>
#define MAX 100000
#define NIL -1
struct Node{int p, l, r;};
Node T[MAX]; int D[MAX];
using namespace std;
void incur(int r, int d)
{
  D[r] = d;
  if(T[r].l != NIL) incur(T[r].l, d+1);
  if(T[r].r != NIL) incur(T[r].r, d);
}

void print(int v)
{
  printf("node %d: parent = %d, depth = %d, ", v, T[v].p, D[v]);
  if(T[v].p == NIL)
    printf("root, [");
  else if(T[v].l == NIL)
    printf("leaf, [");
  else printf("internal node, [");
  int c = T[v].l;
  int i=0;
  while(c != NIL)
  {
    if(i) printf(", ");
    printf("%d", c);
    c = T[c].r;
    i++;
  }
  printf("]\n");
}
int main()
{
  int left, root, v, num, temp;
  int n;
  scanf("%d", &n);
  for(int i=0; i<n; i++)
  {
    T[i].l = NIL; T[i].p = NIL; T[i].r = NIL;
  }
  for(int i=0; i<n; i++)
  {
    scanf("%d%d", &v, &num);
    for(int j=0; j<num; j++)
    {
      scanf("%d", &temp);
      if(j == 0) T[v].l = temp;
      else T[left].r = temp;
      left = temp;
      T[temp].p = v;
    }
  }
  for(int i=0; i<n; i++)
  {
    if(T[i].p == NIL) root = i;
  }
  incur(root, 0);
  for(int i=0; i<n; i++)
    print(i);

  return 0;
}

