#include<stdio.h>
#define MAX 100005
#define NIL -1

struct Node{ int p, l, r;};
struct Node T[MAX];
int n,pre[MAX],in[MAX],pos[MAX];

void getPreorder(int u){

  if(T[u].l == NIL)
  getPreorder(T[u].l);

  getPreorder(T[u].r);

}

void getInorder(int u){

  if(T[u].l == NIL) return ;
  getInorder(T[u].l);
  getInorder(T[u].r);

}

void getPostorder(int u){

  if(T[u].r == NIL) return;
  getPostorder(T[u].l);
  getPostorder(T[u].r);

}

void print(int u){
  int i;

  printf("Preorder\n");
  for(i = 0; i < n; i++){
    printf(" %d",pre[i]);
  }
  printf("\nInorder\n");
  for(i=0; i<n; i++){
    printf(" %d",in[i]);
  }
  printf("\nPostorder\n");
  for(i=0; i<n; i++){
    printf(" %d",pos[i]);
  }
  printf("\n");
}


main(){
  int i, j, d, v, l;
  int pre;
  
  scanf("%d", &n);
  
  for ( i = 0; i < n; i++ ) {
    T[i].p = T[i].l = T[i].r = NIL;
  }
  
  for ( i = 0; i < n; i++ ){
    scanf("%d",&v);
    scanf("%d %d",&T[v].l,&T[v].r);
    T[T[v].l].p = v;
    T[T[v].r].p = v;
  }
   
  for( i = 0; i < n;){
    pre[i] = getPreorder(i);
    in[i] = getInorder(i);
    pos[i] = getPostorder(i);
  }
 
  for ( i = 0; i < n; i++ ) print(i);
  return 0;
}