#include <stdio.h>

struct tree{
    int id;
    int parent;
    int children[20];
    int child;
    int depth;
};

struct tree ki[100000];

typedef int tree; 

int med3(int x, int y, int z){
    if (x < y)
        if (y < z) return y; else if (z < x) return x; else return z; else
        if (z < y) return y; else if (x < z) return x; else return z;
}

void quicksort(int, int);

int main(){
    int key,i,j,k,n,temp;
    scanf("%d",&n);
 
    for(i = 0 ; i < n ; i++){
        scanf("%d %d",&ki[i].id,&ki[i].child);
        if(ki[i].child > 0){
            for(j = 0 ; j < ki[i].child ; j++){
                scanf("%d",&ki[i].children[j]);
            }
        }
    }
   
    quicksort(0,n-1);

    for(i = 0 ; i < n ; i++){
        key = ki[i].id;
        ki[i].parent = -1;
        for(j = 0 ; j < n ; j++){
            if(i!=j){
                if(ki[j].child > 0){
                    for(k = 0 ; k < ki[j].child ; k++){
                        if(key == ki[j].children[k]){
                            ki[i].parent = ki[j].id;
                        }
                    }
                }
            }
        }
        if(ki[i].parent == -1){
            ki[i].depth = 0;
            temp = i;
        }
    }

    if(ki[temp].child > 0){
        for(i = 0 ; i < ki[temp].child ; i++){
            ki[ki[temp].children[i]].depth = 1;
        }
        for(i = 0 ; i < 21 ; i++){
            for(j = 0 ; j < n ; j++){
                if(j!=temp){
                    ki[j].depth = ki[ki[j].parent].depth + 1; 
                }               
            }
        }
    }


    for(i = 0 ; i < n ; i++){
        printf("node %d: parent = %d, depth = %d, ",i,ki[i].parent,ki[i].depth);
        if(ki[i].child > 0 || ki[i].depth == 0){
            if(ki[i].depth == 0) printf("root, [");
            else printf("internal node, [");
            for(j = 0 ; j < ki[i].child ; j++){
                printf("%d",ki[i].children[j]);
                if(j != ki[i].child - 1) printf(", ");
            }
            printf("]\n");
        }
        else printf("leaf, []\n");
    }

    return 0;
            
}

void quicksort(int left, int right)
{
    if (left < right) {
        int i = left, j = right;
        int pivot = med3(ki[i].id, ki[i + (j - i) / 2].id, ki[j].id);
        struct tree tmp;
        while (1) {
            while (ki[i].id < pivot) i++; 
            while (pivot < ki[j].id) j--;
            if (i >= j) break;
            tmp = ki[i]; 
            ki[i] = ki[j]; 
            ki[j] = tmp; 
            i++; 
            j--;
        }
        quicksort(left, i - 1);  /* 分割した左を再帰的にソート */
        quicksort(j + 1, right); /* 分割した右を再帰的にソート */
    }
}
