#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int n;
string sa, sb, a[N], b[N];
int extend(queue<string> &q, unordered_map<string, int> &mp, unordered_map<string, int> &mq, string a[], string b[]){
//将已经在队列中的字符串全部扩展一步
for(int k=0, kk=q.size(); k<kk; k++){
string str = q.front();
q.pop();
for(int i=0, ii=str.size(); i<ii; i++){
for(int j=0; j<n; j++){
if(str.substr(i, a[j].size())==a[j]){
string nstr = str.substr(0, i) + b[j] + str.substr(i+a[j].size());
if(mq.count(nstr)) return mp[str] + mq[nstr] + 1; //在另一个队列中存在,两个方向有交集
if(mp.count(nstr)) continue; //扩展的字符串已经出现过
q.push(nstr);
mp[nstr] = mp[str]+1;
}
}
}
}
return 11;
}
int bfs(){
queue<string> qa, qb;
unordered_map<string, int> va, vb;
qa.push(sa), qb.push(sb);
va[sa] = 0, vb[sb] = 0;
//两个队列有一个为空时,就是不可达的
while(qa.size() && qb.size()){
int res;
//优先搜索较短的队列
if(qa.size()<=qb.size()) res = extend(qa, va, vb, a, b);
else res = extend(qb, vb, va, b, a);
if(res<=10) return res;
}
return 11;
}
int main(){
cin>> sa>> sb;
while(cin>> a[n]>> b[n]) n++;
int ans = bfs();
if(ans>10) puts("NO ANSWER!");
else printf("%d\n", ans);
return 0;
}