#include<stdio.h>

struct Node{
    int p, l, r;
};

#define MAX 25
#define NIL -1

struct Node node[MAX];


void preorder(int u){
    printf("%d ", u);
    if(node[u].l != NIL) preorder(node[u].l);
    if(node[u].r != NIL) preorder(node[u].r);

}

void inorder(int u){
    if(node[u].l != NIL) inorder(node[u].l);
    printf("%d ", u);
    if(node[u].r != NIL) inorder(node[u].r);
    
}

void postorder(int u){
    if(node[u].l != NIL) postorder(node[u].l);
    if(node[u].r != NIL) postorder(node[u].r);
    printf("%d ", u);
}

int main(){
    int n, i;
    scanf("%d", &n);

    for(i = 0; i < n; i++) node[i].p = node[i].l = node[i].r = NIL;

    for(i = 0; i < n; i++){
        int id, c1, c2;
        scanf("%d%d%d", &id, &c1, &c2);
        node[id].l = c1;
        node[id].r = c2;
        if(c1 != -1) node[c1].p = id;
        if(c2 != -1) node[c2].p = id;

    }

    int root;
    for(i = 0; i < n; i++) {
        if(node[i].p == NIL) root = i;
    }

    printf("Preorder\n");
    preorder(root);
    printf("\n");
    printf("Inorder\n");
    inorder(root);
    printf("\n");
    printf("Postorder\n");
    postorder(root);
    printf("\n");
    return 0;
}
