#include<bits/stdc++.h>
using namespace std;constint N =1e6+10;int n;char s[N];
namespace AC
{int tr[N][26], tot;int e[N], fail[N];//e[i] 表示以 i 这个节点编号位置为结尾的单词有多少个voidinsert(char s[]){int u =0;for(int i =1; s[i]; i ++){if(! tr[u][s[i]-'a']) tr[u][s[i]-'a']=++ tot;//注意这里必须用前置++ ,因为默认根节点的编号为 0
u = tr[u][s[i]-'a'];}
e[u]++;//u 这个编号结尾的单词数量 ++}voidbuild()//bfs 构建 fail 指针{
queue<int> q;int u =0;for(int i =0; i <26; i ++){if(tr[u][i])
q.push(tr[u][i]);}while(q.size()){
u = q.front(); q.pop();for(int i =0; i <26; i ++){if(tr[u][i])
fail[tr[u][i]]= tr[fail[u]][i], q.push(tr[u][i]);else
tr[u][i]= tr[fail[u]][i];}}}intquery(char s[]){int u =0, res =0;for(int i =1; s[i]; i ++){
u = tr[u][s[i]-'a'];for(int j = u; j && e[j]!=-1; j = fail[j]){
res += e[j];
e[j]=-1;}}return res;}}intmain(){scanf("%d",&n);for(int i =1; i <= n; i ++){scanf("%s", s +1);
AC::insert(s);}
AC::build();scanf("%s", s +1);int ans = AC::query(s);printf("%d\n", ans);return0;}
#include<bits/stdc++.h>
using namespace std;constint N =155;constint M =1e6+10;char s[N][N], t[M];int n;
namespace AC
{constint SZ = N *80;int tr[SZ][26], tot;int fail[SZ], idx[SZ], val[SZ];int cnt[N];voidinit(){memset(tr,0,sizeof tr);memset(fail,0,sizeof fail);memset(idx,0,sizeof idx);memset(val,0,sizeof val);memset(cnt,0,sizeof cnt);
tot =0;//不要忘了初始化}voidinsert(char s[],int id){int u =0;for(int i =1; s[i]; i ++){if(! tr[u][s[i]-'a']) tr[u][s[i]-'a']=++ tot;
u = tr[u][s[i]-'a'];}
idx[u]= id;}voidbuild(){
queue<int> q;int u =0;for(int i =0; i <26; i ++){if(tr[u][i])
q.push(tr[u][i]);}while(q.size()){
u = q.front(); q.pop();for(int i =0; i <26; i ++){if(tr[u][i])
fail[tr[u][i]]= tr[fail[u]][i], q.push(tr[u][i]);else
tr[u][i]= tr[fail[u]][i];}}}intquery(char s[]){int u =0;for(int i =1; s[i]; i ++){
u = tr[u][s[i]-'a'];for(int j = u; j; j = fail[j])
val[j]++;}int res =0;//模式串的最大出现次数for(int i =0; i <= tot; i ++){if(idx[i]) res =max(res, val[i]), cnt[idx[i]]= val[i];}return res;}}intmain(){while(scanf("%d",&n)&& n){
AC::init();for(int i =1; i <= n; i ++){scanf("%s", s[i]+1);
AC::insert(s[i], i);}
AC::build();scanf("%s", t +1);int ans = AC::query(t);printf("%d\n", ans);for(int i =1; i <= n; i ++){if(AC::cnt[i]== ans)printf("%s\n", s[i]+1);}}return0;}