#include<stdio.h>
#include<stdlib.h>

typedef struct box{
	int par;//親の接点番号
	int left;//子（左）
	int right;//子（右）
} Node;

void preorder(Node *node,int par)
{
	printf(" %d",par);
	if(node[par].left!=-1) preorder(node,node[par].left);
	if(node[par].right!=-1) preorder(node,node[par].right);
}

void inorder(Node *node,int par)
{
	if(node[par].left==-1&&node[par].right==-1) {
		printf(" %d",par);
		return;
	}
	if(node[par].left!=-1) inorder(node,node[par].left);
	printf(" %d",par);
	if(node[par].right!=-1) inorder(node,node[par].right);
	
}

void postorder(Node *node,int par)
{
	if(node[par].left==-1&&node[par].right==-1) {
		printf(" %d",par);
		return;
	}
	if(node[par].left!=-1) postorder(node,node[par].left);
	if(node[par].right!=-1) postorder(node,node[par].right);
	printf(" %d",par);
}

int main(void)
{
	int i,j,n;
	int box,s;
	int par;
	Node *node;
	
	scanf("%d",&n);
	node=(Node*)malloc(sizeof(Node)*n);
	for(i=0;i<n;i++) node[i].par=-1;//親の節点番号を初期化
	for(i=0;i<n;i++){
		scanf("%d",&box);
		scanf("%d",&node[box].left);
		node[node[box].left].par=box;
		scanf("%d",&node[box].right);
		node[node[box].right].par=box;
	}
	for(i=0;i<n;i++) if(node[i].par==-1) par=i;
	printf("Preorder\n");
	preorder(node,par);
	printf("\nInorder\n");
	inorder(node,par);
	printf("\nPostorder\n");
	postorder(node,par);
	printf("\n");
		
	free(node);
	
	return 0;
}
