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

struct setu {/*構造体*/
  int r;
  int l;
  int p;
};
struct setu T[100000];
int n,OK[100000];

int depth(int,int);/*depthを求める*/
void strk(int);/*出力関数*/
int main(){

  int i,j,id,k,c,l,r;

  scanf("%d",&n);

for(i=0;i<n;i++){ /*値をNIL(-1)で初期化*/
T[i].p = NIL;
    T[i].l = NIL;
    T[i].r = NIL;
 }

 for(i=0;i<n;i++){/*値を読込む*/
   scanf("%d %d",&id,&k);/*id 節点の番号｜ k 次数 */
   for(j=0;j<k;j++){

     scanf("%d",&c);

     if( j==0 ) {
       T[id].l = c;
     }
     else T[l].r = c;
     l = c;
     T[c].p = id;

   }
 }

  for(i=0;i<n;i++){

    if(T[i].p == NIL) r = i;
  
}
  depth(r,0);

  for(i = 0;i<n ;i++) strk(i);

  return 0;
}

int depth(int u, int p){/*再帰によってdepthを求める*/
OK[u] = p;
  if(T[u].r != NIL) depth(T[u].r,p);
  if(T[u].l != NIL) depth(T[u].l,p + 1);
}

void strk(int u){/*出力関数*/
  int i,c;

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

  if(T[u].p == NIL ) printf("root, ");

  else if(T[u].l == NIL) printf("leaf, ");

  else printf("internal node, ");

  printf("[");

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