#include<stdio.h>
#define MAX 100000
#define NIL -1
typedef struct{
  int p;
  int l;
  int r;
}Node;

Node T[MAX];
int n;//深さを代入

void prewalk(int s){
  if(s!=NIL){
  printf(" %d",s);
  prewalk(T[s].l);
  prewalk(T[s].r);
}
}
void inwalk(int s){
  if(s!=NIL){
  inwalk(T[s].l);
  printf(" %d", s);
  inwalk(T[s].r);
}
}
void postwalk(int s){
  if(s!=NIL){
  postwalk(T[s].l);
  postwalk(T[s].r);
  printf(" %d",s);
}
}


int main(){
  int i,j,left,right,node_num,root;//dは次数
  scanf("%d",&n);
    for(i=0;i<n;i++){
      T[i].l=T[i].r=T[i].p=NIL;
    }
    for(i=0;i<n;i++){//ノードの個数
      scanf("%d",&node_num);
      scanf("%d",&left);
      scanf("%d",&right);
      T[node_num].l=left;
      T[node_num].r=right;
      if(left !=NIL)T[left].p=node_num;
      if(right !=NIL)T[right].p=node_num;
      }
    for(i=0;i<n;i++){
      if(T[i].p==NIL)root=i;//root探し
    }
    printf("Preorder\n");
    prewalk(root);
    printf("\n");
    printf("Inorder\n");
    inwalk(root);
    printf("\n");
    printf("Postorder\n");
    postwalk(root);
    printf("\n");
    return 0;
  }

