#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct node {
    int val;
    struct node* left, *right;
}* bittree, node;

bittree build(bittree& t, bittree node) {
    if (t == NULL) {
        return node;
    }
    if (t->val > node->val) {
        t->left = build(t->left, node);
    } else if (t->val < node->val) {
        t->right = build(t->right, node);
    }
    return t;
}

void prepost(bittree t) {
    if (t != NULL) {
        cout << t->val << " ";
        prepost(t->left);
        prepost(t->right);
    }
}

void midpost(bittree t) {
    if (t != NULL) {
        midpost(t->left);
        cout << t->val << " ";
        midpost(t->right);
    }
}

void postpost(bittree t) {
    if (t != NULL) {
        postpost(t->left);
        postpost(t->right);
        cout << t->val << " ";
    }
}

int main() {
    int n;
    while(cin >> n){
    int temp;
    bittree t = NULL;
    for (int i = 0; i < n; i++) {
        cin >> temp;
        bittree t_node = (bittree)malloc(sizeof(node));
        t_node->val = temp;
        t_node->left = NULL;
        t_node->right = NULL;
        t = build(t, t_node);
    }
    prepost(t);
    cout << endl;
    midpost(t);
    cout << endl;
    postpost(t);
    cout << endl;
    }
    return 0;
}