#include <stdio.h>

#define MAX 100001

typedef struct {
  int p;
  int r;
  int l;
}Node;

Node T[MAX];

void Preorder(int);
void Inorder(int);
void Postorder(int);


int main(){
  int n,i,mun,root;

  for(i=0;i<100001;i++) T[i].p=T[i].l=T[i].r=-1; /* T の要素の初期化 */

  scanf("%d",&n);
  
  for(i=0;i<n;i++){
    scanf("%d",&mun);
    scanf("%d%d",&T[mun].l,&T[mun].r);

    T[T[mun].l].p=mun;
    T[T[mun].r].p=mun;
  }
  
  for(i=0;i<n;i++){/* 根を見つける */
    if(T[i].p==-1) root=i;
  }

  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 key){
  
  printf(" %d",key);
  if(T[key].l!=-1) Preorder(T[key].l);
  if(T[key].r!=-1) Preorder(T[key].r);

}

void Inorder(int key){

  if(T[key].l!=-1) Inorder(T[key].l);
  printf(" %d",key);
  if(T[key].r!=-1) Inorder(T[key].r);

}

void Postorder(int key){

  if(T[key].l!=-1) Postorder(T[key].l);
  if(T[key].r!=-1) Postorder(T[key].r);
  printf(" %d",key);

}

