#include <stdio.h>
struct tree{
  int id;
  int left;
  int right;
  int p;
  int s;
};

int main(){
  int in,n,i,j,si1,si2,pa,pc,pre[25],In[25],Pos[25],count;
  struct tree num[25];

  scanf("%d",&n); //節点の数の入力

//親、兄弟の初期値をー１に設定する
  for(i=0;i<n;i++){
    num[i].p=-1;
    num[i].s=-1;
  }


  //左右の子供の設定
  for(i=0;i<n;i++){
    scanf("%d ",&in);
    num[in].id=in;
    scanf("%d %d",&num[in].left,&num[in].right);
   
    si1=num[in].left;
    si2=num[in].right;
    num[si1].p=num[in].id;
    num[si2].p=num[in].id;
    num[si1].s=si2;
    num[si2].s=si1;
  }

  

  //Preorder
  for(i=0;i<n;i++){
    if(num[i].p== -1){
      count=0;
      pre[count]=num[i].id;
      si1=num[i].left;
      si2=num[i].right;

      while(si1 != -1){
	count++;
	pre[count]=num[si1].id;
	j=num[si1].id;
	si1=num[si1].left;
	
      }
      
      si1=j;
      count++;
      pre[count]=num[si1].s;

      while(si2 != -1){
	count++;
	pre[count]=num[si2].id;
	j=num[si2].id;
	si2=num[si2].left;
      }
      si2=j;
      count++;
      pre[count]=num[si2].s;
      count++;
      pre[count]=num[num[si2].right].p;

    }
  }

  //Inorder
  for(i=0;i<n;i++){
    if(num[i].p==-1){
      si1=num[i].left;
      si1=num[si1].left;
      si2=num[i].right;
      si2=num[si2].left;

      while(si1!=-1){
	j=num[si1].id;
	si1=num[si1].left;
      }

      count=0;
      In[count]=j;
      j=num[j].p;

      while(j!=-1){
	count++;
	In[count]=j;
	if(num[j].right!=-1 && num[num[j].right].left==-1){
	  count++;
	  In[count]=num[j].right;
	}
	j=num[j].p;
      }

      while(si2!=-1){
	j=num[si2].id;
	si2=num[si2].left;
      }

      while(j!=-1){
	count++;
	In[count]=j;
	if(num[j].right!=-1){
	  count++;
	  In[count]=num[j].right;
	}
	j=num[j].p;
      }
    }
  }


  //Postorder

  for(i=0;i<n;i++){
    if(num[i].p==-1){
      si1=num[i].left;
      si1=num[si1].left;
      si2=num[i].right;
      si2=num[si2].left;

      while(si1!=-1){
	j=num[si1].id;
	si1=num[si1].left;
      }

      count=0;
      Pos[count]=j;
      count++;
      Pos[count]=num[j].s;
      si1=num[j].p;
    
      while(num[si1].p!=-1){
	count++;
	Pos[count]=num[si1].id;
	if(num[num[si1].s].left==-1){
	  count++;
	  Pos[count]=num[si1].s;
	}
	si1=num[si1].p;
      }

      while(si2!=-1){
	j=num[si2].id;
	si2=num[si2].left;
      }

      count++;
      Pos[count]=j;
      count++;
      Pos[count]=num[j].s;
      si2=num[j].p;

      while(num[si2].p!=-1){
	count++;
	Pos[count]=si2;
	if(num[num[si2].s].left==-1){
	  count++;
	  Pos[count]=num[si2].s;
	}
	si2=num[si2].p;
      }
      count++;
      Pos[count]=num[si2].id;

    }
  }




  printf("Preorder\n");
  for(i=0;i<n;i++){
    printf(" %d",pre[i]);
  }
  printf("\nInorder\n");
  for(i=0;i<n;i++){
    printf(" %d",In[i]);
  }
  printf("\nPostorder\n");
  for(i=0;i<n;i++){
    printf(" %d",Pos[i]);
  }
  printf("\n");
  return 0;
}