//P1032 字串变换
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
using namespace std;
int n;
string S,F;
string ori[50],to[50];
int LS,LF;
struct STA
{
string s;
int ans;
}NOW,zz;
int cnt;
queue<STA> que;
map<string,bool> ma;
void bfs()
{
string now;
bool flag;
ma[S]=1;
NOW.s=S,NOW.ans=0;
que.push(NOW);
while(!que.empty())
{
NOW=que.front(),que.pop();
now=NOW.s;
// cout<<"now: "<<now<<endl;
if(NOW.ans>=10)
continue;
for(int i=0,len=now.length();i<len;++i)
{
for(int j=1;j<=n;++j)
{
// cout<<"compare: "<<now[i]<<" "<<ori[j][0]<<endl;
if(ori[j].length()>len-i+1)
continue;
if(now[i]==ori[j][0])
{
flag=1;
for(int k=i,l=0,tl=ori[j].length();k<len&&l<tl;++k,++l)
{
if(now[k]!=ori[j][l])
{
flag=0;
break;
}
}
if(flag)
{
++cnt;
string tmp=now;
tmp.replace(tmp.begin()+i,tmp.begin()+i+ori[j].length(),to[j]);
if(tmp==F)
{
printf("%d",NOW.ans+1);
exit(0);
}
// if(cnt==15)
// exit(0);
if(ma[tmp])
continue;
// cout<<tmp<<endl;
ma[tmp]=1;
zz.s=tmp,zz.ans=NOW.ans+1;
que.push(zz);
}
}
}
}
}
}
int main()
{
cin>>S>>F;
if(S==F)
{
puts("0");
return 0;
}
// cout<<S<<" "<<F<<endl;
n=1;
while(cin>>ori[n]>>to[n])
++n;
--n;
// for(int i=1;i<=n;++i)
// cout<<ori[i]<<" "<<to[i]<<endl;
bfs();
puts("NO ANSWER!");
return 0;
}