#include<stdio.h>
 
#define MAX 100
#define NIL -1
 
struct node{
  int parent;
  int left;
  int right;
};
 
struct node T[MAX];
int n;
 
void PreOrder(int);
void InOrder(int);
void PostOrder(int);
 
int main(){
  int id, l, r;
  int root;
  int i;
 
  scanf("%d", &n);
 
  for(i=0; i<n; i++){
    T[i].parent = T[i].left = T[i].right = NIL;
  }
 
  for(i=0; i<n; i++){
    scanf("%d%d%d", &id, &l, &r);
 
    T[id].left = l;
    T[id].right = r;
     
    T[l].parent = id;
    T[r].parent = id;
  }
 
  for(i=0; i<n; i++){
    if(T[i].parent == NIL){
      root = i;
      break;
    }
  }
 
  printf("Preorder\n");
  PreOrder(root);
  printf("\n");
 
  printf("Inorder\n");
  InOrder(root);
  printf("\n");
 
  printf("Postorder\n");
  PostOrder(root);
  printf("\n");
   
  return 0;
}
 
void PreOrder(int u){
  if(u == NIL)
    return;
 
  printf(" %d",u);
  PreOrder(T[u].left);
  PreOrder(T[u].right);
}
 
void InOrder(int u){
  if(u == NIL)
    return;
   
  InOrder(T[u].left);
  printf(" %d",u);
  InOrder(T[u].right);
}
 
void PostOrder(int u){
  if(u == NIL)
    return;
   
  PostOrder(T[u].left);
  PostOrder(T[u].right);
  printf(" %d",u);
}

