using namespace std;
const int N=200,L=75,M=1e6+100;
int tr[N*L][26],Count[N],ne[N*L],cnt[N*L],id[N*L],idx;
int q[N*L],n;
char str[M],a[N][L];
void insert(char str[],int x)
{
int p=0;
for(int i=0;str[i];i++)
{
int v=str[i]-'a';
if(!tr[p][v])tr[p][v]=++idx;
p=tr[p][v];
}
cnt[p]++;id[p]=x;
}
void build()
{
int hh=0,tt=-1;
for(int i=0;i<26;i++)
if(tr[0][i])q[++tt]=tr[0][i];
while(hh<=tt)
{
int t=q[hh++];
for(int i=0;i<26;i++)
{
int p=tr[t][i];
if(!p)
tr[t][i]=tr[ne[t]][i];
else
{
ne[p]=tr[ne[t]][i];
q[++tt]=p;
}
}
}
}
int main()
{
while(scanf("%d",&n),n)
{
memset(cnt,0,sizeof cnt);
memset(tr,0,sizeof tr);
memset(ne,0,sizeof ne);
memset(Count,0,sizeof Count);
idx=0;
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]);
insert(a[i],i);
}
build();
scanf("%s",str);
for(int i=0,j=0;str[i];i++)
{
int v=str[i]-'a';
j=tr[j][v];
int p=j;
while(p)
{
Count[id[p]]+=cnt[p];
p=ne[p];
}
}
int res=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
if(Count[i]>res)res=Count[i];
printf("%d\n",res);
for(int i=1;i<=n;i++)
if(Count[i]==res)
printf("%s\n",a[i]);
}
return 0;
}