#include <stdio.h>
  
#define MAX 25

void Preorder(int);

void Inorder(int);

void Postorder(int);

typedef struct {
  int P;
  int L;
  int R;
}tree;

tree T[MAX];

int n;

int main()
{
  int i,j,id,k,kodomo,root;

  scanf("%d",&n);

  /*入力編*/

  for(i=0;i<n;i++)/*一旦全部の親を-1にする。*/
    {
      T[i].P=-1;
      T[i].R=-1;
      T[i].L=-1;
    }
  
  for(i=0;i<n;i++)
    {
      scanf("%d",&id);/*idとkの入力*/
      scanf("%d",&T[id].L);
      kodomo=T[id].L;
      if(kodomo!=-1)T[kodomo].P=id;
      scanf("%d",&T[id].R);
      kodomo=T[id].R;
      if(kodomo!=-1)T[kodomo].P=id;
    }

  for(i=0;i<n;i++)
    {
      if(T[i].P==-1)
	{
	  root=i;
	  break;
	}
    }
  
  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 i)
{
  static int j;

  printf(" %d",i);
  j++;

  if(j!=n)
    {
      if(T[i].L!=-1)Preorder(T[i].L);
      if(T[i].R!=-1)Preorder(T[i].R);
    }
}

void Inorder(int i)
{
  static int j;
  
  if(j!=n)
    {
      if(T[i].L!=-1)Inorder(T[i].L);
       
      printf(" %d",i);
      j++;

      if(T[i].R!=-1)Inorder(T[i].R);
    }
}

void Postorder(int i)
{
  static int j;

  if(j!=n)
    {
      if(T[i].L!=-1)Postorder(T[i].L);
      
      if(T[i].R!=-1)Postorder(T[i].R);

      printf(" %d",i);
      j++;
    }
      
}


