#include<bits/stdc++.h>
//#include<type_traits>
//#include<debug/debug.h>
//#include<bits/stl_pair.h>
//#pragma GCC optimize(1)
//#pragma GCC optimize(2)
//#ifndef _STL_ALGOBASE_H
//#if __cplusplus > 201703L
//#define _STL_ALGOBASE_H 1
//#if __cplusplus >= 201103L
//#include<bits/c++config.h>
//#include<ext/type_traits.h>
//#include<bits/functexcept.h>
//#include<bits/stl_iterator.h>
//#include<ext/numeric_traits.h>
//#include<bits/concept_check.h>
//#include<bits/predefined_ops.h>
//#include<bits/cpp_type_traits.h>
//#include<bits/move.h> // For std::swap
//#include<bits/stl_iterator_base_types.h>
//#include<bits/stl_iterator_base_funcs.h>
using namespace std;
//#define int long long
//#define ll long long int
#define ull unsigned long long
typedef long long ll;
//#define I using
//#define AK namespace
//#define IOI std
//I AK IOI;
int n,tot1,t1[10000005],que[10000005],qr,nxt[10000005];
char s[10000005],ch[10000005][50];
void build()
{
int u=1,len=strlen(s+1);
for(int i=1,v;i<=len;i++)
{
v=s[i]-'a';
if(!ch[u][v])
{
ch[u][v]=++tot1;
memset(ch[tot1],0,sizeof ch[tot1]);
}
u=ch[u][v];
}
t1[u]++;
return ;
}
void dfs1()
{
for(int i=0;i<26;i++)
ch[0][i]=1;
que[qr=1]=1,nxt[1]=0;
for(int i=1,u,v;i<=qr;i++)
{
u=que[i];
for(int j=0;j<26;j++)
if(!ch[u][j])
ch[u][j]=ch[nxt[u]][j];
else
{
que[++qr]=ch[u][j];
v=nxt[u];
nxt[ch[u][j]]=ch[v][j];
}
}
}
int find()
{
int u=1,len=strlen(s+1),res=0;
for(int i=1,v,p;i<=len;i++)
{
v=s[i]-'a';
p=ch[u][v];
while(p>1)
{
res+=t1[p];
t1[p]=0;
p=nxt[p];
}
u=ch[u][v];
}
return res;
}
int main()
{
tot1=1;
memset(t1,0,sizeof t1);
for(int i=0;i<26;i++)
ch[0][i]=1,ch[1][i]=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%s",s+1),build();
dfs1();
scanf("%s",s+1);
return printf("%d\n",find()),0;
}
为什么会 RE 啊?空间也开大了呀???