代码:
#include<bits/stdc++.h>
using namespace std;
string a,b;
struct node{
string f,t;
}p1[6],p2[6];
int cnt1,cnt2;
struct bfs_cond{
string p;
int tp;
};
void change(string& s,int spos,int epos,string t){
s.replace(s.begin()+spos,s.begin()+epos+1,t);
}
map<string,int>vis;
map<string,int>step;
bool expand(bfs_cond s,queue<bfs_cond>& q){
if(s.tp==1){
for(int i=0;i<cnt1;i++){
for(int j=0;j+p1[i].f.size()-1<s.p.size();j++){
string tmp=s.p.substr(j,p1[i].f.size());
if(tmp==p1[i].f){
string next=s.p;
change(next,j,j+p1[i].f.size()-1,p1[i].t);
if(vis[next]==0){
step[next]=step[s.p]+1;
vis[next]=1;
q.push({next,1});
}else if(vis[next]==2){
if(step[next]+step[s.p]+1<=10){
cout<<step[next]+step[s.p]+1;
return 1;
}
}
}
}
}
}else{
for(int i=0;i<cnt2;i++){
for(int j=0;j+p2[i].f.size()-1<s.p.size();j++){
string tmp=s.p.substr(j,p2[i].f.size());
if(tmp==p2[i].f){
string next=s.p;
change(next,j,j+p2[i].f.size()-1,p2[i].t);
if(vis[next]==0){
step[next]=step[s.p]+1;
vis[next]=2;
q.push({next,2});
}else if(vis[next]==1){
if(step[next]+step[s.p]+1<=10){
cout<<step[next]+step[s.p]+1;
return 1;
}
}
}
}
}
}
}
void bfs(){
queue<bfs_cond>q1,q2;
q1.push({a,1});
q2.push({b,2});
vis[a]=1;
vis[b]=2;
while(q1.size()&&q2.size()){
bfs_cond now1=q1.front();
q1.pop();
if(expand(now1,q1))return;
bfs_cond now2=q2.front();
q2.pop();
if(expand(now2,q2))return;
}
cout<<"NO ANSWER!";
}
int main(){
cin>>a>>b;
string t1,t2;
while(cin>>t1>>t2){
p1[cnt1++]={t1,t2};
p2[cnt2++]={t2,t1};
}
bfs();
return 0;
}