我人傻了
#include<cstdio>
#include<cstring>
#include<queue>
#define N 500010
using namespace std;
queue<int>q;
char t[2*N];
int trie[N][26],fail[N],end[N],ch,n;
void insert(){
int k=strlen(t),i=0,j=0;
for(;i<k;i++){
if(!trie[j][t[i]-'a'])trie[j][t[i]-'a']=ch++;
j=trie[j][t[i]-'a'];
}
end[j]++;
}
void build(){
for(int i=0;i<26;i++)if(trie[0][i])q.push(trie[0][i]);
int k;
while(!q.empty()){
k=q.front();q.pop();
for(int i=0;i<26;i++){
if(trie[k][i]){
fail[trie[k][i]]=trie[fail[k]][i];
q.push(trie[k][i]);
}
else trie[k][i]=trie[fail[k]][i];
}
}
}
int Ans(){
int ans=0,k=strlen(t),j=0;
for(int i=0;i<k;i++){
j=trie[j][t[i]-'a'];
for(int l=j;end[l]!=-1&&j;l=end[l]){ans+=end[l];end[l]=-1;}
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",t);
insert();
}
scanf("%s",t);
build();
printf("%d",Ans());
return 0;
}