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

struct Node{int p=NIL,l=NIL,r=NIL,d=0;};

void printTree(int n, Node T[]){
	for(int i=0;i<n;i++){
		Node nd=T[i];
		cout << "node " << i << ": ";
		cout << "parent = " << nd.p << ", ";
		cout << "depth = " << nd.d << ", ";
		if(nd.p==NIL) cout << "root";
		else if(nd.l==NIL) cout << "leaf";
		else cout << "internal node";
		cout << ", [";
		int c=nd.l;
		while(c!=NIL){
			 cout << c;
			 c = T[c].r;
			 if(c!=NIL) cout << ", ";
		}
		cout << "]" << endl;
	}
}

void setDepth(Node T[], int id, int d){
	T[id].d=d;
	if(T[id].l!=NIL) setDepth(T,T[id].l,d+1);
	if(T[id].r!=NIL) setDepth(T,T[id].r,d);
}

int main(){
	int n,i,id,j,k,c,s,r;
	cin >> n;
	Node T[n];
	for(i=0;i<n;i++){
		cin >> id >> k;
		for(j=0;j<k;j++){
			cin >> c;
			T[c].p=id;
			if(j==0)T[id].l=c;
			else T[s].r=c;
			s=c;
		}
	}
	for(i=0;i<n;i++) if(T[i].p==NIL) r=i;
	setDepth(T,r,0);
	printTree(n,T);
	return 0;
}

