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

typedef struct{
  int id;
  int parent;
  int left;
  int right;
}Tree;

Tree *T;
int n;

void Preorder(int id){
  printf(" %d",T[id].id);
  if(T[id].left != -1) Preorder(T[id].left);
  if(T[id].right != -1) Preorder(T[id].right);
  return;
}

void Inorder(int id){
  if(T[id].left != -1){
    Inorder(T[id].left);
  }
  printf(" %d",T[id].id);
  if(T[id].right != -1){
    Inorder(T[id].right);
  }
  return;
}

void Postorder(int id){
  if(T[id].left != -1) Postorder(T[id].left);
  if(T[id].right != -1) Postorder(T[id].right);
  printf(" %d",T[id].id);
  return;
}

void getParent(){
  int i;

  for(i=0; i<n; i++){
    if(T[i].left != -1){
      T[T[i].left].parent = T[i].id;
    }
    if(T[i].right != -1){
      T[T[i].right].parent = T[i].id;
    }
  }
}

int getRoot(){
  int i,root;
  for(i=0; i<n; i++){
    if(T[i].parent == -1){
      root = T[i].id;
    }
  }
  return root;
}

int main() {
  int i,id,left,right,root;

  scanf("%d",&n);
  T = malloc(sizeof(Tree) * n);
  for(i=0; i<n; i++){
    scanf("%d%d%d",&id,&left,&right);
    T[id].id = id;
    T[id].left = left;
    T[id].right = right;
    T[id].parent = -1;
  }
  getParent();
  root = getRoot();

  printf("Preorder\n");
  Preorder(T[root].id);
  printf("\nInorder\n");
  Inorder(T[root].id);
  printf("\nPostorder\n");
  Postorder(T[root].id);
  printf("\n");

  return 0;
}

