#include <iostream>
using namespace std;
#define nil -1

struct node{
	int p,l,r;
};

node A[100010];
int n,D[100010];

void print(void){
	for(int i=0;i<n;i++){
		printf("node %d: parent = %d, ",i,A[i].p);
		printf("depth = %d, ",D[i]);
		if(A[i].p==nil){
			printf("root, ");
			
		}
		else if(A[i].l==nil){
			printf("leaf, ");
		}
		else{
			printf("internal node, ");
		}
		printf("[");
		if(A[i].l!=nil){
			int j=A[i].l;
			printf("%d",j);
			while(A[j].r!=nil){
				j=A[j].r;
				printf(", %d",j);
			}
		}
		printf("]");
		printf("\n");
	}
}

void depth(int v,int d){
	D[v]=d;
	if(A[v].r!=nil){depth(A[v].r,d);}
	if(A[v].l!=nil){depth(A[v].l,d+1);}
}

int main() {
	cin>>n;
	int v,d,c,l,root;
	for(int i=0;i<n;i++){
		A[i].p=A[i].l=A[i].r=nil;
	}
	for(int i=0;i<n;i++){
		cin>>v>>d;
		for(int j=0;j<d;j++){
			cin>>c;
			if(j==0){A[v].l=c;}
			else{A[l].r=c;}
			l=c;
			A[c].p=v;
		}
	}
	for(int i=0;i<n;i++){
		if(A[i].p==nil){root=i;}
	}
	depth(root,0);
	print();
	return 0;
}
