#include<stdio.h>
typedef struct{
  int number;
  int son[2];//子
  int reach;
  int parent;
  int sibling;
  int degree;
  int height;
}node;

node B[10000];
int n;
int a;
int flag=0;

void preorder(int num){
  if(num!=a)printf(" ");
  printf("%d",B[num].number);
  if(B[num].son[0]==-1)return;
  preorder(B[num].son[0]);
  preorder(B[num].son[1]);

}//OK

void inorder(int num){
  if(B[num].son[0]==-1){
    if(flag==0){
      printf("%d",B[num].number);
      flag=1;
      return;
    }
    else{
      printf(" %d",B[num].number);
      return;
    }
  }
    inorder(B[num].son[0]); 
    if(flag==0){
     printf("%d",B[num].number);
      flag=1;
      
   }
   else{
      printf(" %d",B[num].number);
      
    }
     inorder(B[num].son[1]);
    
  }

void postorder(int num){
  
  if(B[num].son[0]==-1){
    if(num==a)printf("%d",B[num].number);
    else printf("%d ",B[num].number);
    return;
  }
  postorder(B[num].son[0]);
  postorder(B[num].son[1]);
    if(num==a)printf("%d",B[num].number);
    else printf("%d ",B[num].number);
}//OK

int parent(int num){//parent input
  int i,j,r=-1;
  for(i=0;i<n;i++){
    for(j=0;j<2;j++){
      if(num==B[i].son[j]){
	r=i;
	return r;
      }
    }
  }
  return r;
}

int reach(int num){//reach input
  int i,r=0;
  for(i=0;i<n;i++){
    if(B[num].parent==-1)return r;
    else {
      num=B[num].parent;
      r++;
    }
  }
}

int sibling(int num){//sibling input
  int i,j,r=-1;
  for(i=0;i<n;i++){
    if(i!=num){
      if(B[num].parent==B[i].parent){
	r=i;
	return r;
      }
    }
  }
  return r;
}

int height(int num,int r,int parent){//height input
  //  printf("r = %d num = %d\n",r,num);
  if(parent==B[num].parent)r=0;
  if(B[num].son[0]==-1)return r;
  r++;
  r=height(B[num].son[0],r,parent);
  r=height(B[num].son[1],r,parent);
 
  return r;
}

int main(){
  int i,j,k;
  scanf("%d",&n);
  for(i=0;i<n;i++){
    B[i].parent=-1;
  }
  for(i=0;i<n;i++){
    scanf("%d",&a);
    B[a].number=a;
    for(j=0;j<2;j++){
      scanf("%d",&k);
      B[a].son[j]=k;
      B[k].parent=a;
      if(k==-1)B[a].degree=0;
      else B[a].degree=2;
    }
  }

  /*  for(i=0;i<n;i++){
    B[i].parent=parent(i);
  }
  */
  
  for(i=0;i<n;i++){
    B[i].reach=reach(i);
  }
  
  for(i=0;i<n;i++){
    B[i].sibling=sibling(i);
  }
  
  for(i=0;i<n;i++){
    B[i].height=height(i,0,B[i].parent);
  }
  for(i=0;i<n;i++){
    if(B[i].parent==-1){
      a=i;
      break;
    }
  }
  printf("Preorder\n");
   preorder(a);
  printf("\nInorder\n");
   inorder(a);
  printf("\nPostorder\n");
   postorder(a);
  printf("\n");


  return 0;
}