#include <stdio.h>
#include <string.h>

#define MAX_N 25

int getRoot(int,int*);
void preorder(int,int*,int*);
void inorder(int,int*,int*);
void postorder(int,int*,int*);

int main(){
  int n,i,id,root;
    int parent[MAX_N],l[MAX_N],r[MAX_N];;

  memset(parent,-1,sizeof(parent));

  scanf("%d",&n);
  for(i = 0 ; i < n ; i++){
    scanf("%d",&id);
    scanf("%d%d",&l[id],&r[id]);
    if(l[id] >= 0){ parent[l[id]] = id; }
    if(r[id] >= 0){ parent[r[id]] = id; }
  }
  root = getRoot(n,parent);
  printf("Preorder\n"); preorder(root,l,r); printf("\n");
  printf("Inorder\n"); inorder(root,l,r); printf("\n");
  printf("Postorder\n"); postorder(root,l,r); printf("\n");
  return 0;
}

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

void preorder(int x,int *l,int *r){
  if(x >= 0){
    printf(" %d",x);
    preorder(l[x],l,r);
    preorder(r[x],l,r);
  }
}

void inorder(int x,int *l,int *r){
  if(x >= 0){
    inorder(l[x],l,r);
    printf(" %d",x);
    inorder(r[x],l,r);
  }
}

void postorder(int x,int *l,int *r){
  if(x >= 0){
    postorder(l[x],l,r);
    postorder(r[x],l,r);
    printf(" %d",x);
  }
}