#include<bits/stdc++.h>
using namespace std;
string k;
vector h;
int dp[151][151][151][2];
int rec(int ai,int bi,int b,int t)
{
if(dp[ai][bi][b][t]!=-1)
return dp[ai][bi][b][t];
int sm=0;
if(b==h.size())
{
if(ai==k.size())
return 1;
else
return 0;
}
if(bi==h[b].size())
{
if(t==0)
return 0;
else
return rec(ai,0,b+1,0);
}
if(ai<k.size()&&k[ai]==h[b][bi])
{
sm+=rec(ai+1,bi+1,b,1);
sm+=rec(ai,bi+1,b,t);
}
else
{
sm+=rec(ai,bi+1,b,t);
}
return dp[ai][bi][b][t]=sm;
}
int main()
{
string en=“LAST”;
string l=" CASE";
while(1)
{
int n,i,w,x1,z,y;
cin>>n;
if(n==0)
break;
map < string, int >x;
string u;
for(i=0;i<n;i++)
{
cin>>u;
x[u]=1;
}
while(1)
{
string a,s;
cin>>a;
getline(cin,s);
if(a==en&&s==l)
break;
for(i=0;i<a.size();i++)
{
k+=tolower(a[i]);
}
string v;
vector p;
for(i=0;i<s.size();i++)
{
if(s[i]!=’ ')
v+=s[i];
else
{
if(x[v]==0)
{
p.push_back(v);
}
v="";
}
}
if(v!="")
p.push_back(v);
for(i=0;i<p.size();i++)
{
if(p[i]!=""&&p[i]!=" “)
{
h.push_back(p[i]);
}
}
/for(i=0;i<h.size();i++)
{
if(h[i]=="")
h.erase(h.begin()+i);
}/
//cout<<k.size()<<” “<<h.size()<<endl;
for(w=0;w<151;w++)
{
for(x1=0;x1<151;x1++)
{
for(y=0;y<151;y++)
{
for(z=0;z<2;z++)
{
dp[w][x1][y][z]=-1;
}
}
}
}
int ans=rec(0,0,0,0);
if(ans==0)
{
cout<<a<<” is not a valid abbreviation"<<endl;
}
else
{
cout<<a<<" can be formed in “<<ans<<” ways"<<endl;
}
k.clear();
h.clear();
p.clear();
}
x.clear();
}
}