#include <stdio.h>

struct TREE{
   int ID;
   int L;
   int R;
};



void Preorder(struct TREE nord, struct TREE T[], int n, int memo[][2]) {
   printf(" %d", nord.ID);
   if (nord.L != -1) {
	  Preorder(T[memo[nord.L][0]], T, n, memo);
   }
   if (nord.R != -1) {
	  Preorder(T[memo[nord.R][0]], T, n, memo);
   }
}

void Inorder(struct TREE nord, struct TREE T[], int n,int memo[][2]) {
   if (nord.L != -1) {
	  Inorder(T[memo[nord.L][0]], T, n, memo);
   }
   printf(" %d", nord.ID);
   if (nord.R != -1) {
	  Inorder(T[memo[nord.R][0]], T, n, memo);
   }
}

void Postorder(struct TREE nord, struct TREE T[], int n, int memo[][2]) {
   if (nord.L != -1) {
	  Postorder(T[memo[nord.L][0]], T, n, memo);
   }
   if (nord.R != -1) {
	  Postorder(T[memo[nord.R][0]], T, n, memo);
   }
   printf(" %d", nord.ID);
}

int main() { 
   struct TREE T[30];
   int memo[30][2];
   int n, start;
   int i = 0;

   scanf("%d", &n);
   while (i < n) {
	  memo[i][1] = -1;
	  ++i;
   }

   i = 0;

   while (i < n) {
	  scanf("%d %d %d", &T[i].ID, &T[i].L, &T[i].R);
	  memo[T[i].ID][0] = i;
	  if (T[i].L != -1)
	     memo[T[i].L][1] = T[i].ID;
	  if (T[i].R != -1)
	     memo[T[i].R][1] = T[i].ID;
	  ++i;
   }
   i = 0;
   while (i < n) {
	  if (memo[i][1] == -1)
		 start = memo[i][0];
	  ++i;
   }

   printf("Preorder\n");
   Preorder(T[start], T, n, memo);
   putchar('\n');
   printf("Inorder\n");
   Inorder(T[start], T, n, memo);
   putchar('\n');
   printf("Postorder\n");
   Postorder(T[start], T, n, memo);
   putchar('\n');

   return 0;
}