给出一组字母和他们的偏序关系,输出所有可能的排序结果;
#include<cstring>
#include<string>
#include<cstdio>
#include<iostream>
using namespace std;
bool vis[30];
string s1,s2;
int cnt[30],len1,len2;
void dfs(int n,string s)
{
if(n==(len1+1)/2)
{
cout<<s<<endl;
return;
}
for(int i=0;i<26;i++)
{
if(vis[i]&&!cnt[i])
{
vis[i]=0;
for(int j=0;j<len2;j=j+4)
{
if(i==s2[j]-'a')
cnt[s2[j+2]-'a']--;
}
dfs(n+1,s+(char)(i+'a'));
vis[i]=1;
for(int j=0;j<len2;j=j+4)
{
if(i==s2[j]-'a')
cnt[s2[j+2]-'a']++;
}
}
}
}
int main()
{
while(getline(cin,s1))
{
getline(cin,s2);
len1=s1.size();
len2=s2.size();
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<len1;i+=2)
vis[s1[i]-'a']=1;
for(int i=2;i<len2;i+=4)
cnt[s2[i]-'a']++;
dfs(0,"");
printf("\n");
}
return 0;
}