#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
const int N=2e6+10;
const int M=11;
int step[N];
string a,b,s1[M],s2[M],q[N];
int main(){
int n=1;
cin>>a>>b;
while(cin>>s1[n]>>s2[n]) n++;
n--;//处理变换规则
int h=0,t=1;
q[1]=a;
while(h<t){
if(step[++h]>10) break;
for(int i=1;i<=n;i++){//每一种规则都尝试 反正数据小
for(int j=0;j<q[h].length();j++){//可能有好几个地方可以换 所以枚举一下
if(!q[h].compare(j,s1[i].length(),s1[i])){//如果包含给出的串
q[++t]=q[h];
step[t]=step[h]+1;
q[t].replace(j,s1[i].length(),s2[i]);//将找到的字串入队 然后换掉
if(q[t]==b){
cout<<step[t];
return 0;
}
}
}
}
}
cout<<"NO ANSWER!";
return 0;
}
输入数据 (只显示前20行,完整数据请点击上面按钮下载)
abaaaba abcdaba
a b
b d
d e
e f
f g
g c
正确答案
8