#include <stdio.h>
#define MAX 1000
#define NIL -1

struct Node { 
int p, l, r; 
};
struct Node T[MAX];
int n;

void middle( int u );
void follower( int u );
void preceding(int u);

int main() 
{
	int i, x, l, r, ooo;
	
	scanf("%d", &n);
	for ( i = 0; i < n; i++ ) {
		T[i].p = NIL;
	}
	
	for( i = 0; i < n; i++ ) {
		scanf("%d %d %d", &x, &l, &r);
		T[x].r = r;
		T[x].l = l;
		if ( r != NIL) T[r].p = x;
		if ( l != NIL) T[l].p = x;
	}

	for ( i = 0; i < n; i++ ){
		if ( T[i].p == NIL ) ooo = i;
	}

	printf("Preorder\n");
	preceding(ooo);
	printf("\n");
	printf("Inorder\n");
	middle(ooo);
	printf("\n");
	printf("Postorder\n");
	follower(ooo);
	printf("\n");

	return 0;
}

/* 後行順巡回 */
void follower( int u ) {
	if ( u == NIL ) return;
	follower(T[u].l);
	follower(T[u].r);
	printf(" ");
	printf("%d", u);
}

/* 先行順巡回 */
void preceding(int u) {
	if ( u == NIL ) return;
	printf(" ");
	printf("%d", u);
	preceding(T[u].l);
	preceding(T[u].r);
}


/* 中間順巡回 */
void middle( int u ) {
 	if ( u == NIL ) return;
 	middle(T[u].l);
 	printf(" ");
 	printf("%d", u);
 	middle(T[u].r);
}



