#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
  int id;
  struct Node *p;
  struct Node *c;
}node;
void preorder(node*);
void inorder(node*);
void postorder(node*);

int main(){

  int i,j;
  int a,n;
  int id,k;

  //input
  scanf("%d",&n);
  node tree[n];
  for(i=0;i<n;i++){
    tree[i].p=NULL;
  }
  for(i=0;i<n;i++){
    scanf("%d%d",&id);
    tree[id].id=id; 
    tree[id].c=(node*)malloc(2*sizeof(node));
    for(j=0;j<2;j++){
      scanf("%d",&tree[id].c[j].id);
      tree[tree[id].c[j].id].p=&tree[id];
    }
  }
  for(i=0;i<n;i++){
    if(tree[i].p==NULL )root=&tree[i];
  }
  //output
  for(i=0;i<n;i++){
    printf("node %d: ",i);
    printf("Preorder\n");
    preorder(root);
    printf("Ineorder\n");
    inorder(root);
    printf("Postorder\n");
    postorder(root);
    drowchildren(tree[i]);
  }
  
  //free 
  for(i=0;i<n;i++){
    free(tree[i].c);
  }
  return 0;
}
void inorder(Node u){

  if(u!=NULL){
    inorder(&u->c[0]);
    printf(" %d",u->id);
    inorder(&u->c[1]);
  }
}
void preorder(Node u){
  
  if(u==NULL) return;  
  printf(" %d",u->id);
  preorder(&u->c[0]);
  preorder(&u->c[1]);
}

void postorder(node*){
  if(u==NULL) return;
  postorder(&u->c[0]);
  postorder(&u->c[1]);
  printf(" %d",u->id);
}

