#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义二叉树节点结构体
typedef struct TreeNode {
    char data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;
int currentIndex = 0;

TreeNode* buildTree(char *preorder) {
    if (preorder[currentIndex] == '#') {
        // 遇到 '#' 表示空节点,索引后移并返回 NULL
        currentIndex++;
        return NULL;
    }
    // 创建新节点
    TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
    node->data = preorder[currentIndex++];
    // 递归构建左子树
    node->left = buildTree(preorder);
    // 递归构建右子树
    node->right = buildTree(preorder);
    return node;
}

// 中序遍历二叉树
void inorderTraversal(TreeNode *root) {
    if (root == NULL) {
        return;
    }
    // 遍历左子树
    inorderTraversal(root->left);
    // 访问当前节点
    printf("%c ", root->data);
    // 遍历右子树
    inorderTraversal(root->right);
}

int main() {
    char a[100];
    scanf("%s", a);
    TreeNode *root = buildTree(a);
    inorderTraversal(root);
    return 0;
}