#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<unordered_map>
using namespace std;
const int N=6;
int n;
string A,B;
string a[N],b[N];
int extend(queue<string>& q,unordered_map<string,int> &da,unordered_map<string,int> &db,string a[N],string b[N])
{
int d=da[q.front()];
while(q.size()&&da[q.front()]==d)
{
auto t=q.front();
q.pop();
for(int i=0;i<n;i++)//枚举规则
for(int j=0;j<t.size();j++)//t从哪里开始改变
if(t.substr(j,a[i].size())==a[i])//如果t的这一段满足规则
{
string r=t.substr(0,j)+b[i]+t.substr(j+a[i].size());//将这个状态存下来
if(db.count(r)) return da[t]+db[r]+1;//如果b里有这个状态,会师,da[t]+da[t]+1
if(da.count(r)) continue;//如果a出现就跳过
da[r]=da[t]+1;//更新距离
q.push(r);//入队
}
}
return 11;
}
int bfs()
{
if(A==B) return 0;
queue<string>qa,qb;//正向搜索,反向搜索的队列
unordered_map<string,int>da,db;
qa.push(A),qb.push(B);
da[A]=0,db[B]=0;
int step=0;
while(qa.size()&&qb.size())
{
int t;
//哪个队列方向小从哪个方向开始扩展
if(qa.size()<qb.size()) t=extend(qa,da,db,a,b);//a比较小从a开始扩展
else t=extend(qb,db,da,b,a);//b小就从b开始扩展
if(t<=10) return t;
if(++step==10) return -1;
}
return -1;
}
int main()
{
cin>>A>>B;
while(cin>>a[n]>>b[n]) n++;
int t=bfs();
if(t==-1) puts("NO AMSWER!");
else cout<<t<<endl;
}