#include <stdio.h>
#define N 25
 
typedef struct{
  int p;
  int l;
  int r;
}Node;
 
Node T[N];

void preorder(int root){
  int i, j;

  printf(" %d", root);

  if(T[root].l != -1){
    i = T[root].l;
    preorder(i);
    if(T[root].r != -1){
      j = T[root].r;
      preorder(j);
    }
  }else{
    if(T[root].r != -1){
      j = T[root].r;
      preorder(j);
    }
  }
}
 
void inorder(int root){
  int i, j;

  if(T[root].l != -1){
    i = T[root].l;
    inorder(i);
    printf(" %d", root);
    if(T[root].r != -1){
      j = T[root].r;
      inorder(j);
    }
  }else{
    if(T[root].r != -1){
      printf(" %d", root);
      j = T[root].r;
      inorder(j);
    }else{
      printf(" %d", root);
    }
  }
}
 
void postorder(int root){
  int i, j;
  if(T[root].l != -1){
    i = T[root].l;
    postorder(i);
    if(T[root].r != -1){
      j = T[root].r;
      postorder(j);
    }
    printf(" %d", root);
  }else{
    if(T[root].r != -1){
      j = T[root].r;
      postorder(j);
      printf(" %d", root);
    }else{
      printf(" %d", root);
    }
  }
}
 
int main(){
  int i, j, n, id, child, judge;
  scanf("%d", &n);
  for(i = 0;i < n;i++){
    T[i].p = T[i].l = T[i].r = -1;
  }
  for(i = 0; i < n; i++){
    scanf("%d", &id);
    for(j = 0; j < 2; j++){
      scanf("%d", &child);
      if(child != -1){
        T[child].p = id;
        if(j == 0){
          T[id].l = child;
        }else{
          T[id].r = child;
        }
      }
    }
  }
  for(i = 0; i < n; i++){
    if(T[i].p == -1){
      judge = i;
      break;
    }
  }
  printf("Preorder\n");
  preorder(judge);
  printf("\nInorder\n");
  inorder(judge);
  printf("\nPostorder\n");
  postorder(judge);
  printf("\n");

  return 0;
}