#include <stdio.h>

#define nil -1
#define N 25

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

node T[n];

int getsib(int id) {
	if (T[id].p == nil) return nil;

	if (T[T[id].p].l != id) return T[T[id].p].l;
	return T[T[id].p].r;
}

int getdegree(int id) {
	if (T[id].l != nil) return 2;
	if (T[id].r != nil) return 2;

	return 0;
}

int getdepth(int id) {
	int depth = 1;

	if (T[id].p == nil) return 0;
	depth += getdepth(T[id].p);
	return depth;
}

int getheight(int id) {
	int height = 1;
	int r,l;

	if (T[id].l == -1 && T[id].r == -1) {
		return 0;
	}

	if (T[id].l == -1) {
		height += getheight(T[id].r);
	} else if (T[id].r == -1) {
		height += getheight(T[id].l);
	} else {
		r = getheight(T[id].r);
		l = getheight(T[id].l);
		if (r >= l) height += r;
		else height += l;
	}

	return height;
}

int main() {
	int i,n;
	int id,l,r;

	scanf("%d",&n);

	for (i = 0; i < n; i++) {
		T[i].p = nil;
	}
	for (i = 0; i < n; i++) {
		scanf("%d %d %d",&id,&l,&r);
		T[i].l = l;
		T[i].r = r;
		if (l != nil) T[l].p = id;
		if (r != nil) T[r].p = id;
	}

	for (i = 0; i < n; i++) {
		printf("node %d: parent = %d, sibling = %d, degree = %d, depth = %d, height = %d",i,T[i].p, getsib(i), getdegree(i), getdepth(i), getheight(i));
		if (T[i].p == nil) printf(" root\n");
		else if (T[i].l != nil) printf(" internal node\n");
		else printf(" leaf\n");
	}

	return 0;
}