#include <stdio.h>
#include <string.h>

#define N 131072
#define K 8
#define TYPE 16

typedef struct {
  int parent;
  int depth;
  int k;
  int child[K];
} node_t;

void plusDepth(node_t *array, int id) {
  int j;

  for (j = 0; j < array[id].k; j++) {
    array[array[id].child[j]].depth++;
    plusDepth(array, array[id].child[j]);
  }
}

void connectNode(node_t *array, int n) {
  int id, j;

  for (id = 0; id < n; id++) {
    for (j = 0; j < array[id].k; j++)
      array[array[id].child[j]].parent = id;
    plusDepth(array, id);
  }
}

int main(void) {
  int i, j, n, id;
  char type[TYPE] = {0};
  node_t array[N];
  memset(array, -1,  sizeof(array));

  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d", &id);
    scanf("%d", &array[id].k);
    for (j = 0; j < array[id].k; j++)
      scanf("%d", &array[id].child[j]);
  }

  connectNode(array, n);
  for (i = 0; i < n; i++) {
    // determination a node type
    if (array[i].parent == -1) {
      strcpy(type, "root");
    } else if (array[i].k == 0) {
      strcpy(type, "leaf");
    } else {
      strcpy(type, "internal node");
    }
    
    printf("node %d: parent = %d, depth = %d, %s, ["
	   , i, array[i].parent, array[i].depth + 1, type);
    for (j = 0; j < array[i].k; j++) {
      if (j)
	printf(", ");
      printf("%d", array[i].child[j]);
    }
    printf("]\n");
  }

  return 0;
}