rt 样例没过,没看出来错哪了
#include <bits/stdc++.h>
#define int long long
#define str first
#define dep second
#define endl '\n'
#define MAXN 0x3f3f3f3f3f3f3f3f
#define MINN -0x3f3f3f3f3f3f3f3f
#define Trubiacy ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef pair<string,int> pii;
const int N=29;
int n;
string a,b,s1[N],s2[N];
map<string,bool> h1,h2;
queue<pii> q1,q2;
int bfs(){
h2[b]=1;
q1.push({a,0});q2.push({b,1});
while(q1.size()&&q2.size()){
pii tmp1=q1.front();q1.pop();
string str1=tmp1.str;
int dep1=tmp1.dep;
if(dep1>10) return -1;
for(int i=1;i<=n;i++){
if(s1[i].size()>str1.size()) continue;
for(int j=0;j<=str1.size()-s1[i].size();j++){
string to=s1[i];
if(str1.substr(j,s1[i].size())!=to) continue;
string now=str1.substr(0,j);
now+=s2[i];now+=str1.substr(j+s2[i].size());
if(h1[now]) continue;
if(h2[now]) return dep1+h2[now];
q1.push({now,dep1+1});
h1[now]=dep1+1;
}
}
pii tmp2=q2.front();q2.pop();
string str2=tmp2.str;
int dep2=tmp2.dep;
if(dep2>10) return -1;
for(int i=1;i<=n;i++){
if(s2[i].size()>str2.size()) continue;
for(int j=0;j<=str2.size()-s2[i].size();j++){
string to=s2[i];
if(str2.substr(j,s2[i].size())!=to) continue;
string now=str2.substr(0,j);
now+=s1[i];now+=str2.substr(j+s1[i].size());
if(h2[now]) continue;
if(h1[now]) return dep2+h1[now];
q2.push({now,dep2+1});
h2[now]=dep2+1;
}
}
}
return -1;
}
signed main(){
Trubiacy;
int Tracy=1;
// int Tracy; cin>>Tracy;
while(Tracy--){
cin>>a>>b;
while(cin>>s1[++n]>>s2[n]);
int ans=bfs();
if(ans==-1) cout<<"NO ANSWER!";
else cout<<ans-1;
}
return 0;
}