#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<string> ve;
map<char,char> lef;
map<char,char> rig;
void build(char fa,char x)
{
if(x>fa)
{
if(rig[fa]==0)
{
rig[fa]=x;
}else
{
build(rig[fa],x);
}
}else
{
if(lef[fa]==0)
{
lef[fa]=x;
}else
{
build(lef[fa],x);
}
}
}
void dfs(char x)
{
cout<<x;
if(lef[x]!=0)
{
dfs(lef[x]);
}
if(rig[x]!=0)
{
dfs(rig[x]);
}
}
int main()
{
while(1)
{
string s;
cin>>s;
if(s=="*" ||s=="$")
{
lef.clear();
rig.clear();
char root=ve[ve.size()-1][0];
for(int i=ve.size()-2;i>=0;i--)
{
for(int j=0;j<ve[i].size();j++)
{
build(root, ve[i][j]);
}
}
dfs(root);
cout<<endl;
ve.clear();
if(s=="*")
{
continue;
}else if(s=="$")
{
break;
}
}
ve.push_back(s);
}
return 0;
}