#include <stdio.h>
#define N 100000
#define MAX_NODE_DEPTH 20

int Node[N][MAX_NODE_DEPTH]; // idx:0 is node count
int n;
int root;

int getRootNode();
int getParent(int);
int getDepth(int);

int main(){
    int idx;
    int i, j;

    scanf("%d", &n);
    for(i=0;i<n;i++){
        scanf("%d", &idx); // idx
        scanf("%d", &Node[idx][0]); // node cnt
        for(j=1;j<Node[idx][0]+1;j++) scanf("%d", &Node[idx][j]);
    }

    root = getRootNode();

    for(i=0;i<n;i++){
        printf("node %d: ", i);
        printf("parent = %d, ", getParent(i));
        printf("depth = %d, ", getDepth(i));
        if(getParent(i) == -1) { // root
            printf("root, ");
            printf("[");
            for(j=1;j<Node[i][0]+1;j++){
                printf("%d", Node[i][j]);
                if (j != Node[i][0]) printf(", ");
            }
            printf("]\n");
        }else if(Node[i][0] == 0) { // leaf
            // TODO
            printf("leaf, []\n");
        }else { // internal node
            // TODO
            printf("internal node, ");
            printf("[");
            for(j=1;j<Node[i][0]+1;j++){
                printf("%d", Node[i][j]);
                if (j != Node[i][0]) printf(", ");
            }
            printf("]\n");
        }
    }
    return 0;
}

int getRootNode() {
    int i;
    for(i=0;i<n;i++) {
        if(getParent(i) == -1) return i;
    }
    return i;
}

int getParent(int node) {
    int i, j;
    for(i=0;i<n;i++) {
        for(j=1;j<Node[i][0]+1;j++){
            if(Node[i][j] == node) {
                return i;
            }
        }
    }
    return -1;
}

int getDepth(int node) {
    int depth = 0;
    if (getParent(node) == -1) return depth;
    return getDepth(getParent(node)) + 1;
}