#include <stdio.h>

typedef char BTDataType;
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

BTNode* BuyBTNode(BTDataType x)
{
	BTNode* newNode = (BTNode*)malloc(sizeof(BTNode));
	if (newNode == NULL)
	{
		perror("malloc failed");
		return NULL;
	}
	newNode->data = x;
	newNode->left = NULL;
	newNode->right = NULL;
	return newNode;
}
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi)
{
	//当*pi > n时,后续节点默认为空
	if (*pi >= n)
	{
		(*pi)++;
		return NULL;
	}

	if (a[*pi] == '#')
	{
		(*pi)++;
		return NULL;
	}
	BTNode* root = BuyBTNode(a[*pi]);
	(*pi)++;
	root->left = BinaryTreeCreate(a, n, pi);
	root->right = BinaryTreeCreate(a, n, pi);

	return root;
}

//针对char输出
void BTNodePrint(BTNode* node)
{
	if (node == NULL)
	{
		printf("");
	}
	else
	{
		printf("%c ", node->data);
	}
}

void  BinaryTreeInOrder(BTNode* root)
{
	if (root == NULL)
	{
		BTNodePrint(root);
		return;
	}
	BinaryTreeInOrder(root->left);
	BTNodePrint(root);
	BinaryTreeInOrder(root->right);
}

int main()
{
    char a[100] = {};
    while (scanf("%s", a) != EOF)
    {
        //创建二叉树
        int i = 0;
        BTNode* root = BinaryTreeCreate(a, 100, &i);
        //中序遍历
        BinaryTreeInOrder(root);
    }
    return 0;
}