样例通过
#include<bits/stdc++.h>
#define ll long long
#define R register
#define F(i,a,b) for(int i = (a);i<=(b);i++)
using namespace std;
inline int read(){R int x=0,t=1;R char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') t=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*t;}
const int N=10010;
string last,s;
vector<int>g[N];
int d[N];
bool f[N];
inline void add(int ui,int vi)
{
g[ui].push_back(vi);
return;
}
inline void topu()
{
queue<int>q;
F(i,1,30){
if(g[i].size()) f[i]=1;
for(int j = 0;j<g[i].size();j++){
d[g[i][j]]++;
}
}
F(i,1,30){
if(f[i]==1 && d[i]==0){
q.push(i);
}
}
for(;q.size();){
int u=q.front();
q.pop();
printf("%c",u+'A'-1);
for(int i = 0;i<g[u].size();i++){
int v=g[u][i];
d[v]--;
if(d[v]==0) q.push(v);
}
}
return;
}
inline void solve()
{
cin >> last;
for(;;){
cin >> s;
if(s=="#") break;
for(int i = 0;i<min(last.size(),s.size());i++){
if(last[i]!=s[i]){
add(last[i]-'A'+1,s[i]-'A'+1);
// printf("%c %c\n",last[i],s[i]);
break;
}
}
last=s;
}
topu();
}
signed main()
{
solve();
return 0;
}