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

typedef struct{
  int parent;
  int left;
  int right;
}node;

void preOrder(node*,int);
void inOrder(node*,int);
void postOrder(node*,int);

int findParent(node*);
#define NIL -1

int main(){
  int n,id,frag,count;
  int i,j,k;
  int p;

  node T[25];
  scanf("%d",&n);
  
  for(i=0;i<n;i++){
    T[i].parent=-1;
    T[i].left=-1;
    T[i].right=-1;
  }

  for(i=0;i<n;i++){
    scanf("%d",&id);
    scanf("%d%d",&T[id].left,&T[id].right);
  }
  for(i=0;i<n;i++){
    for(j=0;j<n;j++){
      if(i==T[j].left){
	T[i].parent=j;
      }
      if(i==T[j].right){
	T[i].parent=j;
      }
    }
  }
  
  p=findParent(T);

  printf("Preorder\n");
  preOrder(T,p);
  printf("\nInorder\n");
  inOrder(T,p);
  printf("\nPostorder\n");
  postOrder(T,p);
  printf("\n");
  return 0;
}

void preOrder(node *T,int u){
  if(u==NIL) return;
  printf(" %d",u);
  preOrder(T,T[u].left);
  preOrder(T,T[u].right);
}

void inOrder(node *T,int u){
  if(u==NIL) return;
  inOrder(T,T[u].left);
  printf(" %d",u);
  inOrder(T,T[u].right);
}

void postOrder(node *T,int u){
  if(u==NIL) return;
  postOrder(T,T[u].left);
  postOrder(T,T[u].right);
  printf(" %d",u);

}

int findParent(node *T){
  int i=0;
  while(1){
    if(T[i].parent==NIL) return i;
    i++;
  }
}