code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e6+10;
int ch[N][26],ne[N],cnt[N],idx=1,n,que[N],vis[N],tot;
char s[N],s1[170][100];
inline void insert(char str[],int num){
int p=1,len=strlen(str+1);
for(int i=1;i<=len;i++){
int u=str[i]-'a';
if(!ch[p][u]) ch[p][u]=++idx;
p=ch[p][u];
}
cnt[p]=num;
return ;
}
inline void build(){
for(int i=0;i<26;i++) ch[0][i]=1;
ne[1]=0,que[1]=1;
for(int q1=1,q2=1;q1<=q2;q1++)
{
int u=que[q1];
for(int i=0;i<26;i++){
if(!ch[u][i]) ch[u][i]=ch[ne[u]][i];
else{
que[++q2]=ch[u][i];
ne[ch[u][i]]=ch[ne[u]][i];
}
}
}
}
inline void query(char s[]){
int u=1,len=strlen(s+1);
for(int i=1;i<=len;i++){
int v=s[i]-'a';
int k=ch[u][v];
while(k>1){
if(cnt[k]) vis[cnt[k]]++;
k=ne[k];
}
u=ch[u][v];
}
}
int main(){
while(cin>>n,n){
memset(cnt,0,sizeof cnt);
memset(ne,0,sizeof ne);
memset(vis,0,sizeof vis);
memset(que,0,sizeof que);
memset(ch,0,sizeof ch);
memset(s1,'\0',sizeof s1);
idx=1;
for(int i=1;i<=n;i++)
{
scanf("%s",s1[i]+1);
insert(s1[i]+1,i);
}
build();
scanf("%s",s+1);
query(s);
int maxz=0;
for(int i=1;i<=n;i++){
maxz=max(maxz,vis[i]);
}
cout<<maxz<<endl;
for(int i=1;i<=n;i++){
if(vis[i]==maxz){
printf("%s\n",s1[i]+1);
}
}
}
return 0;
}