#include<stdio.h>
#include<stdlib.h>


typedef struct node_
{
    int parent;//親
    int lf; //左ノード
    int rh; //右ノード
} node;
 
void init_x(node *X,int no)
{
    X[no].parent = -1;
}
 
void input_x(node *X,int no,int lf,int rh)
{
    X[no].lf = lf;
    X[no].rh = rh;
}

void parent_x(node *X,int No)
{
    switch(X[No].lf){
        case -1:
            break;
        default:
            X[X[No].lf].parent = No;
            break;
    }
    switch(X[No].rh){
        case -1:
            break;
        default:
            X[X[No].rh].parent = No;
            break;
    }
}

void node_print(int N,node *X,int no)
{
    if(N == -1) return;
    if(no == 1) printf(" %d",N);
    node_print(X[N].lf,X,no);
    if(no == 2) printf(" %d",N);
    node_print(X[N].rh,X,no);
    if(no == 3)printf(" %d",N);
}

int main()
{
    int n,d1=0,d2=0,No,prtop;
    scanf("%d",&n);
    node *X = malloc(sizeof(node)*n);
    for(int i=0;i<n;i++) init_x(X,i);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d%d",&No,&d1,&d2);
        input_x(X,No,d1,d2);
        parent_x(X,No);
    }
    for(int i=0; i<n;i++)
    {
        if(X[i].parent == -1)
        {
            prtop = i;
            break;
        }
    }
    printf("Preorder\n");
    node_print(prtop,X,1);
    printf("\nInorder\n");
    node_print(prtop,X,2);
    printf("\nPostorder\n");
    node_print(prtop,X,3);
    printf("\n");
    free(X);
}
