#include <cstdio>
#include <iostream>
using namespace std;
struct TreeNode{
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int x):data(x),left(NULL),right(NULL){}
};
TreeNode* Insert(TreeNode* root,int x){
if(root==NULL){
root = new TreeNode(x);
}else if(x<root->data){
root->left= Insert(root->left,x);
}else if(x>root->data){
root->right=Insert(root->right,x);
}
return root;
}
void PreOrder(TreeNode* T){
if(T==NULL){
return;
}
printf("%d ",T->data);
PreOrder(T->left);
PreOrder(T->right);
return;
}
void InOrder(TreeNode* T){
if(T==NULL){
return;
}
InOrder(T->left);
printf("%d ",T->data);
InOrder(T->right);
return;
}
void PostOrder(TreeNode* T){
if(T==NULL){
return;
}
PostOrder(T->left);
PostOrder(T->right);
printf("%d ",T->data);
return;
}
int main(){
int sample;
while(scanf("%d",&sample)!=EOF){
TreeNode* T=NULL;
for(int i=0;i<sample;i++){
int x;
scanf("%d",&x);
T=Insert(T,x);
}
PreOrder(T);
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
}
return 0;
}