#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iostream>#include<sstream>#include<algorithm>#include<cmath>#include<vector>#include<stack>#include<queue>#include<deque>#include<bitset>#include<set>#include<map>#include<unordered_set>#include<unordered_map>#defineendl'\n'#definePIacos(-1)#defineLLlonglong#defineINF0x3f3f3f3f#definelowbit(x)(-x&x)#definemem(a, b)memset(a, b,sizeof a)#definerev(x)reverse(x.begin(), x.end())#defineIOSios::sync_with_stdio(false),cin.tie(0)usingnamespace std;constint N =1e6+10;int n;char s[N], t[N];int tr[N][26], ne[N], cnt[N], idx;voidinsert(char* s){int p =0;for(int i =0; s[i]; i ++){int j = s[i]-'a';if(!tr[p][j]) tr[p][j]=++ idx;
p = tr[p][j];}
cnt[p]++;}voidbuild(){
queue<int> q;for(int i =0; i <26; i ++){if(tr[0][i]) q.push(tr[0][i]);}while(q.size()){int u = q.front();
q.pop();for(int i =0; i <26; i ++){int v = tr[u][i];if(v) ne[v]= tr[ne[u]][i], q.push(v);else tr[u][i]= tr[ne[u]][i];}}}intquery(char* s){int ans =0;for(int i =0, k =0; s[k]; k ++){
i = tr[i][s[k]-'a'];for(int j = i; j &&~cnt[j]; j = ne[j]){
ans += cnt[j];
cnt[j]=-1;}}return ans;}voidsolve(){
cin >> n;for(int i =0; i < n; i ++){
cin >> t;insert(t);}
cin >> s;build();
cout <<query(s)<< endl;}intmain(){
IOS;solve();return0;}