#include <iostream>
#include <cstdio>

using namespace std;

typedef int ElementType;

struct TreeNode {
    ElementType data;
    TreeNode* leftChild;
    TreeNode* rightChild;

    TreeNode(ElementType c) {
        this->data = c;
        this->leftChild = nullptr;
        this->rightChild = nullptr;
    }
};

/**
 * 前序遍历
 */
void preOrder(TreeNode* root);

/**
 * 中序遍历
 * @param root
 */
void inOrder(TreeNode* root);

/**
 * 后序遍历
 * @param root
 */
void postOrder(TreeNode* root);

/**
 * 层序遍历
 * @param root
 */
void levelOrder(TreeNode* root);

/**
 * 访问结点
 * @param node
 */
void visit(TreeNode* node);

/**
 * 插入结点
 * @param root
 * @param x
 * @return
 */
TreeNode* insert(TreeNode* root, ElementType x);

/**
 * 二叉排序树--华中科技大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        TreeNode* root = nullptr;
        for (int i = 0; i < n; ++i) {
            int x;
            cin >> x;
            root = insert(root, x);
        }
        preOrder(root);
        cout << endl;
        inOrder(root);
        cout << endl;
        postOrder(root);
        cout << endl;
    }

    return 0;
}

void preOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    /*
     * 根、左子树、右子树
     */
    visit(root);
    preOrder(root->leftChild);
    preOrder(root->rightChild);
}

void inOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    /*
     * 左子树、根、右子树
     */
    inOrder(root->leftChild);
    visit(root);
    inOrder(root->rightChild);
}

void postOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    /*
     * 左子树、右子树、根
     */
    postOrder(root->leftChild);
    postOrder(root->rightChild);
    visit(root);
}

void visit(TreeNode* node) {
    cout << node->data << " ";
}

TreeNode* insert(TreeNode* root, ElementType x) {
    if (root == nullptr) {
        /*
         * 创建新结点
         */
        root = new TreeNode(x);
    } else if (x < root->data) {
        /*
         * 插入到左子树
         */
        root->leftChild = insert(root->leftChild, x);
    } else if (x > root->data) {
        /*
         * 插入到右子树
         */
        root->rightChild = insert(root->rightChild, x);
    } else {
        /*
         * 题目说重复的元素无需输出,因此重复元素我们不进行插入
         */
    }
    return root;
}