#include <iostream>
#include <string>
using namespace std;
struct Tree {
public:
string _data;
Tree *lchild;
Tree *rchild;
};
void recursion_create_tree(Tree *tree) {
string data;
cin >> data;
if (data == "a") {
return;
}
Tree* _tree = new Tree;
_tree -> _data = data;
tree = _tree;
recursion_create_tree(tree -> lchild);
recursion_create_tree(tree -> rchild);
}
void pre_traverse(Tree *tree) {
if (tree) {
cout << tree -> _data << endl;;
if (tree -> lchild) {
pre_traverse(tree -> lchild);
}
if (tree -> rchild) {
pre_traverse(tree -> rchild);
}
}
}
void in_traverse(Tree *tree) {
if (tree) {
if (tree -> lchild) {
in_traverse(tree -> lchild);
}
cout << tree -> _data << endl;
if (tree -> rchild) {
in_traverse(tree -> rchild);
}
}
}
void beh_traverse(Tree *tree) {
if (tree) {
if (tree -> lchild) {
beh_traverse(tree -> lchild);
}
if (tree -> rchild) {
beh_traverse(tree -> rchild);
}
cout << tree -> _data << endl;
}
}
int main(int argc, char** args) {
Tree* tree;
recursion_create_tree(tree);
pre_traverse(tree);
in_traverse(tree);
beh_traverse(tree);
return 0;
}