#include <iostream>
using namespace std;
int n;
struct Node{
int val;
Node *left, *right;
Node(int _val):val(_val), left(NULL), right(NULL){}
};
void insert(Node* &root, int x){
if(!root) root = new Node(x);
else if(x > root->val) insert(root->right, x);
else if(x < root->val) insert(root->left, x);
//else return;
}
void dfs(Node* root, int op){
if(!root) return;
if(op == 1) cout<<root->val<<' ';
dfs(root->left, op);
if(op == 2) cout<<root->val<<' ';
dfs(root->right, op);
if(op == 3) cout<<root->val<<' ';
}
int main(){
Node *root;
while(cin>>n){
root = NULL;
for(int i = 0; i < n; i ++){
int x;
cin>>x;
insert(root, x);
}
for(int i = 1; i <= 3; i ++){
dfs(root, i);
cout<<endl;
}
}
return 0;
}