1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4 #include <cstdlib>
5 using namespace std;
6 const int MAX = 26;
7 struct node{
8 node *fail;
9 node *next[MAX];
10 int cnt;
11 node(){
12 fail = NULL;
13 cnt = 0;
14 memset(next, 0, sizeof(next));
15 }
16 }*q[500008];
17 char keyword[51];
18 char str[1000001];
19 int head, tail;
20 void insert(char *str, node *root){
21 node *p = root;
22 int i = 0, index;
23 while(str[i]){
24 index = str[i] - 'a';
25 if(p->next[index] == NULL) p->next[index] = new node();
26 p = p->next[index];
27 i++;
28 }
29 p->cnt++;
30 }
31 void build_ac_automation(node *root){
32 int i;
33 root->fail = NULL;
34 q[head++] = root;
35 while(head != tail){
36 node *temp = q[tail++];
37 node *p = NULL;
38 for(i = 0; i < 26; i++){
39 if(temp->next[i] != NULL){
40 if(temp == root) temp->next[i]->fail = root;
41 else {
42 p = temp->fail;
43 while(p != NULL){
44 if(p->next[i] != NULL){
45 temp->next[i]->fail = p->next[i];
46 break;
47 }
48 p = p->fail;
49 }
50 if(p == NULL) temp->next[i]->fail = root;
51
52 }
53 q[head++] = temp->next[i];
54 }
55 }
56 }
57 }
58 int query(node *root){
59 int i = 0, cnt = 0, index;
60 node *p = root;
61 while(str[i]){
62 index = str[i] - 'a';
63 while(p->next[index] == NULL && p != root) p = p->fail;
64 p = p->next[index];
65 p = (p == NULL)? root:p;
66 node *temp = p;
67 while(temp != root && temp->cnt != -1){
68 cnt += temp->cnt;
69 temp->cnt = -1;
70 temp = temp->fail;
71 }
72 i++;
73 }
74 return cnt;
75 }
76 int main()
77 {
78 int n, t;
79 scanf("%d", &t);
80 while(t--){
81 head = tail = 0;
82 node * root = new node();
83 scanf("%d", &n);
84 getchar();
85 while(n--){
86 gets(keyword);
87 insert(keyword,root);
88 }
89 build_ac_automation(root);
90 scanf("%s", str);
91
92 printf("%d\n", query(root));
93 }
94 //system("pause");
95 return 0;
96 }