#include<bits/stdc++.h>
using namespace std;
string a,b,ga[10],gb[10];
int n=1;
struct node{
string now;
int ans;
node():now(),ans(){}
node(string now,int ans):now(now),ans(ans){}
};
int fin(string s,int ya)
{
for(int i=0;i<s.size();i++)
if(s[i]==ga[ya][0])
{
for(int j=1;j<ga[ya].size();j++)
if(s[i+j]!=ga[ya][j])
return -1;
return i;
}
return -1;
}
bool sjb(string s)
{
for(int i=0;i<s.size();i++)
if(s[i]!=b[i] && s[i]!='-')
return false;
return true;
}
void bfs()
{
queue<node>q;
q.push(node(a,0));
while(q.size())
{
int ans=q.front().ans;string now=q.front().now;q.pop();
if(now==b)
{
printf("%d",ans);
return ;
}
if(ans>10)
{
printf("NO ANSWER!");
return ;
}
for(int i=1;i<=n;i++)
{
int wa=fin(now,i);
if(wa!=-1)
{
string sj=now;
int siz=abs(gb[i].size()-ga[i].size());
if(ga[i].size()<gb[i].size())
{
for(int j=0;j<ga[i].size();j++)
sj[wa+j]=gb[i][j];
for(int j=sj.size()+siz;j>=wa+ga[i].size();j--)
sj[j]=sj[j-siz];
}
for(int j=0;j<gb[i].size();j++)
sj[wa+j]=gb[i][j];
if(ga[i].size()>gb[i].size())
{
for(int k=wa+gb[i].size();k<=wa+ga[i].size();k++)
sj[k]=sj[k+1];
for(int k=sj.size()-siz;k<sj.size();k++)
sj[k]='-';
}
if(sjb(sj))
{
printf("%d",ans+1);
return;
}
q.push(node(sj,ans+1));
}
}
}
}
int main()
{
cin>>a>>b;
while(cin>>ga[n]>>gb[n]) n++;
bfs();
return 0;
}