#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef struct Node
{
string strName;
Node* pNode_L;
Node* pNode_R;
}LBNode, *LBTree;
void DFS(LBNode* pNode, string& strRes)
{
if (!pNode)
return;
DFS(pNode->pNode_L, strRes);
strRes += pNode->strName;
DFS(pNode->pNode_R, strRes);
}
string solve(string strIn)
{
vector<string> vIns;
string strTmp = strIn;
while (!strTmp.empty())
{
int nIdx = strTmp.find(',');
string strNodeName;
if (nIdx != -1)
{
strNodeName = strTmp.substr(0, nIdx);
strTmp = strTmp.substr(nIdx + 1, strTmp.length() - nIdx - 1);
}
else
{
strNodeName = strTmp;
strTmp.clear();
}
vIns.push_back(strNodeName);
}
if (vIns[0] == "null")
return "null";
else
{
for (int i = vIns.size() - 1; i > 0; i--)
{
if (0 == i % 2)
{
if ("null" == vIns[i / 2 - 1])
{
return "null";
}
}
else
{
if ("null" == vIns[i / 2])
{
return "null";
}
}
}
}
vector<LBNode*> vNodes;
for (int i = 0; i < vIns.size(); i++)
{
LBNode* pNode = new LBNode;
pNode->strName = vIns[i];
pNode->pNode_L = NULL;
pNode->pNode_R = NULL;
vNodes.push_back(pNode);
}
LBTree pTree = vNodes[0];
for (int i = vNodes.size() - 1; i > 0; i--)
{
if (0 == i % 2)
{
if (vNodes[i]->strName != "null")
{
vNodes[i / 2 - 1]->pNode_R = vNodes[i];
}
}
else
{
if (vNodes[i]->strName != "null")
{
vNodes[i / 2]->pNode_L = vNodes[i];
}
}
}
string strRes;
DFS(pTree, strRes);
return strRes;
}
int main()
{
string strIn;
getline(cin, strIn);
cout << solve(strIn) << endl;
system("pause");
return 0;
}