样例过不了却AC
加上注释语句 cnt=1 后正常
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define rd read()
#define mkp make_pair
#define psb push_back
#define Elaina 0
#define mst(a,b) memset((a),(b),sizeof(a))
#define random(a,b) (1ll*rand()*rand()*rand()%((b)-(a)+1)+(a))
inline ll read(){
ll f=1,x=0;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) f=(ch=='-'?-1:1);
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return f*x;
}
const int mod=1e9+7;
const int N=1e6+100;
const int inf=0x7fffffff;
int n,m;
char s[N];
namespace AC{
int cnt;
struct ciallo{
int son[26],flg,fail;
}tr[N];
void insert(char *s){
int x=0,len=strlen(s);
for(int i=0;i<len;i++){
int y=s[i]-'a';
if(!tr[x].son[y]){
tr[x].son[y]=++cnt;
}
x=tr[x].son[y];
}
tr[x].flg++;
}
void getFail(){
queue<int> q;
for(int i=0;i<26;i++){
if(tr[0].son[i]){
q.push(tr[0].son[i]);
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<26;i++){
int y=tr[x].son[i],fail=tr[x].fail;
if(!y){
tr[x].son[i]=tr[fail].son[i];
}else{
tr[y].fail=tr[fail].son[i];
q.push(y);
}
}
}
}
int query(char *s){
int x=0,ans=0,len=strlen(s);
for(int i=0;i<len;i++){
int y=s[i]-'a',k=tr[x].son[y];
while(k>1 && tr[k].flg!=-1){
ans+=tr[k].flg;
tr[k].flg=-1;
k=tr[k].fail;
}
x=tr[x].son[y];
}
return ans;
}
};
using namespace AC;
signed main(){
cnt=1;
n=rd;
for(int i=1;i<=n;i++){
scanf("%s",s);
insert(s);
}
getFail();
scanf("%s",s);
printf("%lld\n",query(s));
return Elaina;
}