#include <stdio.h>

#define NIL -1
#define N 25

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

Node T[N];

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

	return 0;
}

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 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,j,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: p = %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;
}