#include<stdio.h>
#define max 10000
#define NUL -1

struct Node{
  int h, l, e;
};

struct Node T[max];
int n;
void preParse(int ne){
  if (ne==NUL) return;
  printf(" %d", ne);
  preParse(T[ne].l);
  preParse(T[ne].e);
}
void inParse(int ne){
  if (ne==NUL) return;
  inParse(T[ne].l);
  printf(" %d",ne);
  inParse(T[ne].e);
}
void postParse(int ne){
  if (ne==NUL) return;
  postParse(T[ne].l);
  postParse(T[ne].e);
  printf(" %d", ne);
}

int main(){
  int i, v, l, r, root;
  scanf("%d", &n);
  for (i=0;i<n;i++ ) {
    T[i].h=NUL;
  }

  for (i=0;i<n;i++){
    scanf("%d %d %d", &v, &l, &r);
    T[v].l=l;
    T[v].e=r;
    if (l!=NUL){
      T[l].h=v;}
    if (r!=NUL){
      T[r].h=v;}
  }

  for ( i=0;i<n;i++ ) {
    if(T[i].h== NUL) {
      root = i;}
  }
  printf("Preorder\n");
  preParse(root);
  printf("\n");
  printf("Inorder\n");
  inParse(root);
  printf("\n");
  printf("Postorder\n");
  postParse(root);
  printf("\n");

  return 0;
}
