#include <cstdio>
#include <algorithm>
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <map>
using namespace std;
int len, root, n, k, m;
int sum[1100000], dd[1100000], son[1100000][26], to[1100000], fa[1100000];
char S[410000];
void ins(char *S, int id) {
int l = strlen(S);
int now = root;
for (int i = 0; i < l; i++) {
sum[now] += 1;
if (!son[now][S[i] - 'a'])
son[now][S[i] - 'a'] = ++len;
now = son[now][S[i] - 'a'];
}
sum[now] += 1;
dd[now] += 1;
to[id] = now;
}
void dfs(int k, int &ss) {
for (int i = 0; i < 26; i++)
if (son[k][i]) {
dfs(son[k][i], son[k][i]);
if (sum[son[k][i]] == sum[k])
ss = son[k][i];
}
}
int query(int k) {
int ans = 0;
while (k != root) {
int kk = fa[k];
for (int i = 0; i < 26; i++)
if (son[kk][S[i] - 'a'] == k)
break;
else
ans += sum[son[kk][S[i] - 'a']];
ans += dd[kk];
k = kk;
}
return ans + 1;
}
void ddd(int xx) {
// printf("%d\n", xx);
for (int i = 0; i < 26; i++)
if (son[xx][i])
fa[son[xx][i]] = xx,
ddd(son[xx][i]);
}
int main() {
root = len = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%s", S), ins(S, i);
dfs(root, root);
ddd(root);
// for (int i = 1; i <= len; i++)
// for (int j = 0; j < 26; j++)
// if (son[i][j])
// fa[son[i][j]] = i;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d%s", &k, S);
printf("%d\n", query(to[k]));
}
}