#include<bits/stdc++.h>
#define int long long
#define _for(i, a, b) for(int i = a;i < b;++i)
#define _rep(i, a, b) for(int i = a;i <= b;++i)
int readll(){int x; scanf("%lld", &x); return x;}
using namespace std;
typedef struct TNode{
char val;
struct TNode *left, *right, *up;
}*Tree;
void pre_traversal(Tree p){
if(p -> val != '#') cout<<p -> val<<' ';
if(p -> left != NULL) pre_traversal(p -> left);
if(p -> right != NULL) pre_traversal(p -> right);
}
void in_traversal(Tree p){
if(p -> left != NULL) in_traversal(p -> left);
if(p -> val != '#') cout<<p -> val<<' ';
if(p -> right != NULL) in_traversal(p -> right);
}
void post_traversal(Tree p){
if(p -> left != NULL) post_traversal(p -> left);
if(p -> right != NULL) post_traversal(p -> right);
if(p -> val != '#') cout<<p -> val<<' ';
}
signed main(){
Tree PNode = new TNode;
string preorder;
cin>>preorder;
int len = preorder.size();
Tree temp;
int direction = 0;
TNode * t = new TNode;
//initialize
t -> left = NULL;
t -> right = NULL;
t -> up = NULL;
t -> val = preorder[0];
temp = t;
PNode = t;//point to the first node;
_for(i, 1, len - 1){
//cout<<i<<endl;
TNode * t2 = new TNode;
//initialize
t2 -> left = NULL;
t2 -> right = NULL;
t2 -> up = NULL;
t2 -> val = preorder[i];
if(direction == 0){
t2 -> up = temp;
temp -> left = t2;
}
if(direction == 1){
t2 -> up = temp;
temp -> right = t2;
}
if(preorder[i] != '#') temp = t2;
else while(temp->left != NULL && temp->right != NULL) {temp = temp -> up;}
if(temp -> left == NULL) direction = 0;
else if(temp -> right == NULL) direction = 1;
}
//pre_traversal(PNode);
in_traversal(PNode);
//post_traversal(PNode);
return 0;
}