#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <queue>
#include <set>
#include <map>
#include <vector>
#define REP(I,A,B) for(int I=A,END=B;I<=END;I++)
#define REPD(I,A,B) for(int I=A,END=B;I>=END;I--)
#define RI(X) scanf("%d",&X)
#define RS(X) scanf("%s",X)
#define GCH getchar()
#define PCH(X) putchar(X)
#define MAX(A,B) (((A)>(B))?(A):(B))
#define MIN(A,B) (((A)<(B))?(A):(B))
#define MS(X,Y) memset(X,Y,sizeof(X))
#define MC(X,Y,var,len) memcpy((X),(Y),sizeof(var)*(len))
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define MAXN 105
using namespace std;
char str[MAXN]={0};
int len=0;
int f[MAXN]={0};
int g[27][MAXN][MAXN]={0};
struct trans
{
int ch1,ch2;
};
vector <trans> change[27];
int size[27]={0};
int n;
void open()
{
freopen("gen.in","r",stdin);
freopen("gen.out","w",stdout);
}
void close()
{
fclose(stdin);
fclose(stdout);
}
void init_dynamic()
{
MS(g,0);
REP(i,0,len)
g[str[i]-'A'+1][i][i]=1;
int j,ch1,ch2;
REP(l,1,len)
REP(i,0,len-l)
{
j=i+l;
REP(ch,1,26)
{
REP(k,0,size[ch])
{
ch1=change[ch][k].ch1;
ch2=change[ch][k].ch2;
REP(kk,i,j)
if (g[ch1][i][kk]==1 && g[ch2][kk+1][j]==1)
{
g[ch][i][j]=1;
break;
}
if (g[ch][i][j])
break;
}
}
}
}
#define S 19
void dynamic()
{
MS(f,0);
REP(i,0,len)
{
f[i]=g[S][0][i];
if (f[i]==0)
f[i]=101;
}
REP(i,0,len-1)
REP(j,1,len)
if (f[i]!=101)
{
if (g[S][i+1][j]==1)
if (f[j]>f[i]+1)
f[j]=f[i]+1;
}
if (f[len]!=101)printf("%d\n",f[len]);
else printf("NIE\n");
}
void init()
{
RI(n);
char ch[3];
GCH;
int ch1,ch2,ch3;
REP(i,1,n)
{
RS(ch);
ch1=ch[0]-'A'+1,ch2=ch[1]-'A'+1,ch3=ch[2]-'A'+1;
change[ch1].push_back((trans){ch2,ch3});
size[ch1]++;
}
REP(i,1,26)
size[i]--;
//REP(i,1,10)
{
RS(str);
len=strlen(str)-1;
init_dynamic();//预处理数组
dynamic();//
}
}
int main()
{
open();
init();
close();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDx2ZWN0b3I+CiNkZWZpbmUgUkVQKEksQSxCKSBmb3IoaW50IEk9QSxFTkQ9QjtJPD1FTkQ7SSsrKQojZGVmaW5lIFJFUEQoSSxBLEIpIGZvcihpbnQgST1BLEVORD1CO0k+PUVORDtJLS0pCiNkZWZpbmUgUkkoWCkgc2NhbmYoIiVkIiwmWCkKI2RlZmluZSBSUyhYKSBzY2FuZigiJXMiLFgpCiNkZWZpbmUgR0NIIGdldGNoYXIoKQojZGVmaW5lIFBDSChYKSBwdXRjaGFyKFgpCiNkZWZpbmUgTUFYKEEsQikgKCgoQSk+KEIpKT8oQSk6KEIpKQojZGVmaW5lIE1JTihBLEIpICgoKEEpPChCKSk/KEEpOihCKSkKI2RlZmluZSBNUyhYLFkpIG1lbXNldChYLFksc2l6ZW9mKFgpKQojZGVmaW5lIE1DKFgsWSx2YXIsbGVuKSBtZW1jcHkoKFgpLChZKSxzaXplb2YodmFyKSoobGVuKSkKI2RlZmluZSBkZWJ1ZyguLi4pIGZwcmludGYoc3RkZXJyLF9fVkFfQVJHU19fKQojZGVmaW5lIE1BWE4gMTA1CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNoYXIgc3RyW01BWE5dPXswfTsKaW50IGxlbj0wOwppbnQgZltNQVhOXT17MH07CmludCBnWzI3XVtNQVhOXVtNQVhOXT17MH07CnN0cnVjdCB0cmFucwp7CiAgaW50IGNoMSxjaDI7Cn07CnZlY3RvciA8dHJhbnM+IGNoYW5nZVsyN107CmludCBzaXplWzI3XT17MH07CmludCBuOwp2b2lkIG9wZW4oKQp7CiAgZnJlb3BlbigiZ2VuLmluIiwiciIsc3RkaW4pOwogIGZyZW9wZW4oImdlbi5vdXQiLCJ3IixzdGRvdXQpOwp9CnZvaWQgY2xvc2UoKQp7CiAgZmNsb3NlKHN0ZGluKTsKICBmY2xvc2Uoc3Rkb3V0KTsKfQp2b2lkIGluaXRfZHluYW1pYygpCnsKICBNUyhnLDApOwogIFJFUChpLDAsbGVuKQogICAgZ1tzdHJbaV0tJ0EnKzFdW2ldW2ldPTE7CiAgaW50IGosY2gxLGNoMjsKICBSRVAobCwxLGxlbikKICAgIFJFUChpLDAsbGVuLWwpCiAgICB7CgkgICBqPWkrbDsKCSAgIFJFUChjaCwxLDI2KQoJICAgewoJICAgICBSRVAoaywwLHNpemVbY2hdKQoJICAgICB7CgkJICAgY2gxPWNoYW5nZVtjaF1ba10uY2gxOwoJCSAgIGNoMj1jaGFuZ2VbY2hdW2tdLmNoMjsKCQkgICBSRVAoa2ssaSxqKQoJCSAgICAgaWYgKGdbY2gxXVtpXVtra109PTEgJiYgZ1tjaDJdW2trKzFdW2pdPT0xKQoJCSAgICAgewoJCQkgICBnW2NoXVtpXVtqXT0xOwoJCQkgICBicmVhazsKCQkgICAgIH0KCQkgICBpZiAoZ1tjaF1baV1bal0pCgkJICAgICBicmVhazsKCQkgfQoJICAgfQoJfQp9CiNkZWZpbmUgUyAxOQp2b2lkIGR5bmFtaWMoKQp7CiAgTVMoZiwwKTsKICBSRVAoaSwwLGxlbikKICB7CiAgICBmW2ldPWdbU11bMF1baV07CiAgICBpZiAoZltpXT09MCkKICAgICAgZltpXT0xMDE7CiAgfQogIFJFUChpLDAsbGVuLTEpCiAgIFJFUChqLDEsbGVuKQogICAgIGlmIChmW2ldIT0xMDEpCiAgICAgewoJICAgaWYgKGdbU11baSsxXVtqXT09MSkKCSAgICAgaWYgKGZbal0+ZltpXSsxKQoJICAgICAgIGZbal09ZltpXSsxOwoJIH0KICBpZiAoZltsZW5dIT0xMDEpcHJpbnRmKCIlZFxuIixmW2xlbl0pOwogIGVsc2UgcHJpbnRmKCJOSUVcbiIpOwp9IAp2b2lkIGluaXQoKQp7CiAgUkkobik7CiAgY2hhciBjaFszXTsKICBHQ0g7CiAgaW50IGNoMSxjaDIsY2gzOwogIFJFUChpLDEsbikKICB7CiAgICBSUyhjaCk7ICAgIAogICAgY2gxPWNoWzBdLSdBJysxLGNoMj1jaFsxXS0nQScrMSxjaDM9Y2hbMl0tJ0EnKzE7CiAgICBjaGFuZ2VbY2gxXS5wdXNoX2JhY2soKHRyYW5zKXtjaDIsY2gzfSk7CiAgICBzaXplW2NoMV0rKzsKICB9CiAgUkVQKGksMSwyNikKICAgIHNpemVbaV0tLTsKICAvL1JFUChpLDEsMTApCiAgewogICAgUlMoc3RyKTsKICAgIGxlbj1zdHJsZW4oc3RyKS0xOwogICAgaW5pdF9keW5hbWljKCk7Ly/pooTlpITnkIbmlbDnu4QgCglkeW5hbWljKCk7Ly8KICB9Cn0KaW50IG1haW4oKQp7CiAgb3BlbigpOwogIGluaXQoKTsKICBjbG9zZSgpOwogIHJldHVybiAwOwp9Cg==