#include <iostream>
#include <cstring>
using namespace std;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BTnode;
char a[100];
int cur = -1;
void Create(BTnode *&T)
{
cur++;
if(cur >= strlen(a)) return;
if(a[cur] == '#')
{
T = NULL;
}
else
{
T = new BTnode;
T->data = a[cur];
Create(T->lchild);
Create(T->rchild);
}
}
void Pre(BTnode *T)
{
if(T)
{
cout<<T->data<<" ";
Pre(T->lchild);
Pre(T->rchild);
}
}
void Mid(BTnode *T)
{
if(T == NULL) return;
Mid(T->lchild);
cout<<T->data;
Mid(T->rchild);
}
void Pos(BTnode *T)
{
if(T == NULL) return;
Pos(T->lchild);
Pos(T->rchild);
cout<<T->data<<" ";
}
void Level(BTnode *T)
{
if(T == NULL) return;
BTnode *a[100];
int front = -1, rear = 0;
a[0] = T;
while(front != rear)
{
front++;
cout<<a[front]->data;
if(a[front]->lchild) a[++rear] = a[front]->lchild;
if(a[front]->rchild) a[++rear] = a[front]->rchild;
}
}
int GetHeight(BTnode *T)
{
if(T == NULL)
return 0;
return max(GetHeight(T->lchild), GetHeight(T->rchild)) + 1;
}
void Leaves(BTnode *T)
{
if(T == NULL) return;
if(!T->lchild && !T->rchild) cout<<T->data<<" ";
else
{
Leaves(T->lchild);
Leaves(T->rchild);
}
}
int LeavesNum(BTnode *T)
{
if(T == NULL) return 0;
if(!T->lchild && !T->rchild) return 1;
return LeavesNum(T->lchild) + LeavesNum(T->rchild);
}
void Copy(BTnode *T, BTnode *&t)
{
if(T == NULL)
{
t = NULL;
}
else
{
t = new BTnode;
t->data = T->data;
Copy(T->lchild, t->lchild);
Copy(T->rchild, t->rchild);
}
}
int main()
{
BTnode *T, *t;
cin>>a;
Create(T);
Pre(T);
cout<<endl;
Copy(T, t);
Level(t);
cout<<endl;
return 0;
}