// node�ő��
#define MAX 100005
#define NIL -1

struct Node {
    int parent;
    int left;
    int right;
};
// �z��ŕێ�����
struct Node gNode[MAX];
int gDepth[MAX];
/*�\���̂Ƃ���Node���`����
�q���Ȃ����ƂȂǂ���������NIL���`���܂����B
NIL��objective-c�Ȃǂɂ���`����Ă��܂��B

left�͎q�Ƃ����Ӗ�������right�͓����K�w�̌Z��̂悤�ȈӖ������ł��B

�����ďo�͊֐����`���܂��B
*/
void print(int node){
int i,left;
    printf("node %d: parent = %d, depth = %d, ",node,gNode[node].parent,gDepth[node] );
    
    if(gNode[node].parent == NIL) printf("root, ");
    else if(gNode[node].left == NIL)printf("leaf, ");
    else printf("internal node, ");
    
    printf("[");
    
    for(i = 0,left = gNode[node].left;left != NIL;++i,left = gNode[left].right){
        if(i) printf(", ");
        printf("%d",left);
    }
    printf("]\n");
}
/*���ԂƂ��Ă܂��A�Ώۂ�node��left���o�͂��܂��B
�����āA�o�͂���left node�ɔ�сA����left(node�ƕ\���ł���)��right����left���o��
������J��Ԃ��܂��B

�[�������߂āAglobal�ϐ�gDepth�ɑ������֐��ł��B

*/

// �ċA�I�ɐ[�������߂�
void rec(int node ,int parent){
    gDepth[node] = parent;
    if(gNode[node].right != NIL){
        // �E�̌Z��ɓ����[����ݒ�
        rec(gNode[node].right,parent);
    }
    if(gNode[node].left != NIL){
        // �ł����̎q�Ɏ����̐[��+1��ݒ�
        rec(gNode[node].left,parent + 1);
    }
}

int main(){
    int nodeNum,nodeIndex,node,left,root,n,i,j;
    scanf("%d",&n);
    // 1.������
    for(i = 0;i < n;++i){
        gNode[i].parent = gNode[i].left = gNode[i].right = NIL;
    }
    // 2.node�ɑ�����Ă���
    for(i = 0;i < n;++i){
        scanf("%d%d",&nodeIndex,&nodeNum);
        for(j = 0;j < nodeNum;++j){
            scanf("%d",&node);
            // �����l��left
            if(j == 0){
                gNode[nodeIndex].left = node;//nodeIndex�̈�ԍ��̎q (the most left child of id)
            }
            else{
                gNode[left].right = node;//���̌Z��Ɍq���� (connect to left sibling)
            }
            left = node;
            gNode[node].parent = nodeIndex;
        }
    }
    
    // 3.root��T��
    for(i = 0;i < n;++i){
        if(gNode[i].parent == NIL){
            root = i;
        }
    }
    
    // ������͂��߂Đ[����������
    rec(root,0);
    
    // 4.node��index���Ƃɏo�͂���
    for(i = 0;i < n;++i){
        print(i);
    }
    return 0;
}

