#include <stdio.h>
#include <stdlib.h>
	typedef struct {
		int parent,depth,k;
		int *c;
	} TREE;
void dep(int);

	TREE *t;

int main(){
	int n,i,j,id;
	
	scanf("%d",&n);
	
	t = malloc(sizeof(TREE)*n);
	
	for(i=0;i<n;i++){
		t[i].parent=-1;
		t[i].depth=0;
	}
	
	for(i=0;i<n;i++){
		scanf("%d",&id);
		scanf("%d",&t[id].k);
		t[id].c = malloc(sizeof(int) * t[id].k);
		for(j=0;j<t[id].k;j++){
			scanf("%d",&t[id].c[j]);
			t[t[id].c[j]].parent=id;
		}
	}
	for(i=0;i<n;i++){
		if(t[i].parent==-1) dep(i);
	}
	
	for(i=0;i<n;i++){
		if(t[i].parent==-1){
			printf("node %d: parent = %d, depth = %d, root, [",i,t[i].parent,t[i].depth);
			for(j=0;j<t[i].k;j++){
				if(j!=(t[i].k-1)) printf("%d, ",t[i].c[j]);
				else printf("%d",t[i].c[j]);
		}
			printf("]\n");
		}
		else if(t[i].k!=0){
			printf("node %d: parent = %d, depth = %d, internal node, [",i,t[i].parent,t[i].depth);
			for(j=0;j<t[i].k;j++){
				if(j!=(t[i].k-1)) printf("%d, ",t[i].c[j]);
				else printf("%d",t[i].c[j]);
			}
			printf("]\n");
		}
		else {
			printf("node %d: parent = %d, depth = %d, leaf, [",i,t[i].parent,t[i].depth);
			for(j=0;j<t[i].k;j++){
				if(j!=(t[i].k-1)) printf("%d, ",t[i].c[j]);
				else printf("%d",t[i].c[j]);
			}
			printf("]\n");
		}	
	}
		return 0;
}
void dep(int a){
	int j;
	
	if(t[a].k!=0){
		for(j=0;j<t[a].k;j++){
			t[t[a].c[j]].depth = t[a].depth+1;
			dep(t[a].c[j]);
		}
	}
}
