#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
const int N = 500,M = 250;
int n,e[N],ne[N],h[M],idx;
string ans;
vector<string> w;
bool st[M];
void init(){
w.clear();
memset(st,0,sizeof st);
memset(ne,-1,sizeof ne);
memset(h,-1,sizeof h);
idx=0;
ans.clear();
}
void add(int u,int v,string &s){
e[idx]=v,w.push_back(s),ne[idx]=h[u],h[u]=idx++;
}
string comb(string &s,string &t){
string res;
int i=0,j=0,sle=s.size(),tle=t.size();
while(i<sle && j<tle){
if(s[i]==t[j]) res+=s[i],i++,j++;
else if(s[i]<t[j])
while(s[i]<t[j] && i<sle) i++;
else while(s[i]>t[j] && j<tle) j++;
}
return res;
}
void dfs(int u,int v,string s){
string l=s;
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(st[j]) continue;
sort(w[i].begin(),w[i].end());
s=comb(s,w[i]);
if(j==v){
ans+=s;
s=l;
continue;
}
st[j]=1;
dfs(j,v,s);
st[j]=0;
s=l;
}
}
int main(){
ios::sync_with_stdio(false);
cout.tie(NULL);
while(cin >> n && n){
init();
int a,b;
while(cin >> a >> b && a && b){
string s;
cin >> s;
add(a,b,s);
}
while(cin >> a >> b && a && b){
ans.clear();
string s="abcdefghigklmnopqrstuvwxyz";
st[a]=1;
dfs(a,b,s);
st[a]=0;
if(ans.size()){
bool m[26]={0};
for(int i=0;i<ans.size();i++)
m[ans[i]-'a']=1;
for(int i=0;i<26;i++)
if(m[i]) cout << (char)(i+'a');
cout << endl;
}
else cout << "-" << endl;
}
cout << endl;
}
return 0;
}
POJ 失败大赏
最新推荐文章于 2024-09-15 11:40:06 发布