#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char c;
struct node* left;
struct node* right;
} BinaryTreeNode;
BinaryTreeNode* createTree(char* s);
void inOrder(BinaryTreeNode* r);
int main() {
char s[101];
while (scanf("%s", s) != EOF) {
BinaryTreeNode*root=createTree(s);
inOrder(root),printf("\n");
}
return 0;
}
BinaryTreeNode* createTree(char* s) {
BinaryTreeNode* root, *prev, *current;
root = prev = current = NULL;
BinaryTreeNode* stack[100];
int i = 0, top = -1;
while (s[i] != '\0') {
if (s[i] != '#') {
current = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
current->c = s[i];
current->left = current->right = NULL;
stack[++top] = current;
if (!root) root = current;
else prev->left = current;
prev = current;
} else {
while (s[i] == '#'&&top!=-1) {
prev = stack[top--];
i++;
}
if(s[i]!='\0'&&s[i]!='#'){
current = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
current->c = s[i];
current->left = current->right = NULL;
prev->right=current;
stack[++top] = current;
prev=current;
}
}
i++;
}
return root;
}
// void inOrder(BinaryTreeNode* r) {
// if(!r) return;
// if(r->left)inOrder(r->left);
// printf("%c ",r->c);
// if(r->right)inOrder(r->right);
// }
void inOrder(BinaryTreeNode*r){
BinaryTreeNode*stack[100];
int top=-1;
BinaryTreeNode*current=r;
while(current||top>=0){
if(current){
stack[++top]=current;
current=current->left;
}else{
current=stack[top--];
printf("%c ",current->c);
current=current->right;
}
}
}