#include <iostream>
using namespace std;
struct nodo{
int valor;
nodo* izq;
nodo* der;
nodo(){
valor = (1<<30);
izq = NULL;
der = NULL;
}
nodo(int _v){
valor = _v;
izq = NULL;
der = NULL;
}
};
void insertar(int val, nodo **n){
if((*n) == NULL)
*n = new nodo(val);
else
if(val > (*n)->valor)
insertar(val, &((*n)->der));
else
insertar(val, &((*n)->izq));
}
void preorden(nodo *n){
if(n != NULL){
cout << (n->valor) << " ";
preorden(n->izq);
preorden(n->der);
}
}
void inorden(nodo *n){
if(n != NULL){
inorden(n->izq);
cout << (n->valor) <<" ";
inorden(n->der);
}
}
void postorden(nodo *n){
if(n != NULL){
postorden(n->izq);
postorden(n->der);
cout << (n->valor) << " ";
}
}
int main(){
nodo *raiz;
raiz = NULL;
int nro,tmp;
cin >> nro;
while(nro--){
cin >> tmp;
insertar(tmp, &raiz);
}
cout << "PRE-ORDEN" << endl;
preorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "IN-ORDEN" << endl;
inorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "POST-ORDEN" << endl;
postorden(raiz);
cout <<endl<< "-------------" << endl;
return 0;
}