/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 2e6+10, M = 1e3+10;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+7, inf = 1e6;
const ld EPS = 1e-9;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
vector<int> mp, mp2;
struct node {
node *nxt[10];
int cnt, end;
node() {
cnt = 0, end = 0;
memset(nxt, 0, sizeof nxt);
}
};
struct Trie {
node *root;
Trie() {
root = new node();
}
void insert(string s) {
node *cur = root;
for (int i = 0; i < s.size(); i++) {
if (!cur->nxt[s[i]-'0']) cur->nxt[s[i]-'0'] = new node();
cur->cnt++;
cur = cur->nxt[s[i]-'0'];
}
cur->cnt++;
cur->end++;
}
ll query(string s) {
node *cur = root;
ll ret = 0;
bool lz = true;
for (int i = 0; i < s.size(); i++) {
if (lz && s[i]-'0' > 0) lz = false;
if (!cur->nxt[s[i] - '0'] || cur->nxt[s[i] - '0']->cnt == 0) return 0;
if (!lz){
for (int x = mp[s[i]-'0']-1; x >= 0; x--) {
if (!cur->nxt[mp2[x]] || cur->nxt[mp2[x]]->cnt == 0)continue;
ret += cur->nxt[mp2[x]]->cnt;
}
}
cur = cur->nxt[s[i] - '0'];
}
return ret;
}
};
void solve() {
mp.assign(10, 0);
mp2.assign(10, 0);
ll n; cin >> n;
vector<string> v(n);
fin(0, n) {
cin >> v[i];
v[i] = string(19-v[i].size(), '0') + v[i];
}
Trie tr;
fin(0, n) tr.insert(v[i]);
ll q; cin >> q;
while (q--) {
fin(0, 10) {
int x; cin >> x;
mp[x] = i;
mp2[i] = x;
}
string x; cin >> x;
x = string(19-x.size(), '0')+x;
cout << tr.query(x) << "\n";
}
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
int tt = 1; //cin >> tt;
while(tt--){
solve();
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaW4oYSwgbikgZm9yKGludCBpID0gYTsgaSA8IG47IGkrKykKI2RlZmluZSBmam4oYSwgbikgZm9yKGludCBqID0gYTsgaiA8IG47IGorKykKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLGEuZW5kKCkKI2RlZmluZSBhbGxyKGEpIGEucmJlZ2luKCksYS5yZW5kKCkKI2RlZmluZSBGQVNUIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpLCBjb3V0LnRpZShudWxscHRyKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGRvdWJsZSBQSSA9IGFjb3MoLTEpOwpjb25zdCBpbnQgTiA9IDJlNisxMCwgTSA9IDFlMysxMDsKY29uc3QgbGwgb28gPSAweDNmM2YzZjNmM2YzZjNmM2Y7CmNvbnN0IGludCBtb2QgPSAxZTkrNywgaW5mID0gMWU2Owpjb25zdCBsZCBFUFMgPSAxZS05OwoKc3RyaW5nIGRpW10gPSB7IkQiLCJMIiwgIlUiLCAiUiIsICJVTCIsICJVUiIsICJETCIsICJEUiJ9OwppbnQgZHhbXSA9IHsrMSwgKzAsICswLCAtMSwgLTEsIC0xLCArMSwgKzF9OwppbnQgZHlbXSA9IHsrMCwgLTEsICsxLCArMCwgLTEsICsxLCAtMSwgKzF9OwpjaGFyIGRjW10gPSB7J0QnLCAnTCcsICdSJywgJ1UnfTsKCnZlY3RvcjxpbnQ+IG1wLCBtcDI7CnN0cnVjdCBub2RlIHsKICAgIG5vZGUgKm54dFsxMF07CiAgICBpbnQgY250LCBlbmQ7CgogICAgbm9kZSgpIHsKICAgICAgICBjbnQgPSAwLCBlbmQgPSAwOwogICAgICAgIG1lbXNldChueHQsIDAsIHNpemVvZiBueHQpOwogICAgfQp9OwoKc3RydWN0IFRyaWUgewogICAgbm9kZSAqcm9vdDsKCiAgICBUcmllKCkgewogICAgICAgIHJvb3QgPSBuZXcgbm9kZSgpOwogICAgfQoKICAgIHZvaWQgaW5zZXJ0KHN0cmluZyBzKSB7CiAgICAgICAgbm9kZSAqY3VyID0gcm9vdDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgaWYgKCFjdXItPm54dFtzW2ldLScwJ10pIGN1ci0+bnh0W3NbaV0tJzAnXSA9IG5ldyBub2RlKCk7CiAgICAgICAgICAgIGN1ci0+Y250Kys7CiAgICAgICAgICAgIGN1ciA9IGN1ci0+bnh0W3NbaV0tJzAnXTsKICAgICAgICB9CiAgICAgICAgY3VyLT5jbnQrKzsKICAgICAgICBjdXItPmVuZCsrOwogICAgfQoKICAgIGxsIHF1ZXJ5KHN0cmluZyBzKSB7CiAgICAgICAgbm9kZSAqY3VyID0gcm9vdDsKICAgICAgICBsbCByZXQgPSAwOwogICAgICAgIGJvb2wgbHogPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICBpZiAobHogJiYgc1tpXS0nMCcgPiAwKSBseiA9IGZhbHNlOwogICAgICAgICAgICBpZiAoIWN1ci0+bnh0W3NbaV0gLSAnMCddIHx8IGN1ci0+bnh0W3NbaV0gLSAnMCddLT5jbnQgPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgICAgIGlmICghbHopewogICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IG1wW3NbaV0tJzAnXS0xOyB4ID49IDA7IHgtLSkgewogICAgICAgICAgICAgICAgICAgIGlmICghY3VyLT5ueHRbbXAyW3hdXSB8fCBjdXItPm54dFttcDJbeF1dLT5jbnQgPT0gMCljb250aW51ZTsKICAgICAgICAgICAgICAgICAgICByZXQgKz0gY3VyLT5ueHRbbXAyW3hdXS0+Y250OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1ciA9IGN1ci0+bnh0W3NbaV0gLSAnMCddOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgfQp9OwoKdm9pZCBzb2x2ZSgpIHsKICAgIG1wLmFzc2lnbigxMCwgMCk7CiAgICBtcDIuYXNzaWduKDEwLCAwKTsKICAgIGxsIG47IGNpbiA+PiBuOwogICAgdmVjdG9yPHN0cmluZz4gdihuKTsKICAgIGZpbigwLCBuKSB7CiAgICAgICAgY2luID4+IHZbaV07CiAgICAgICAgdltpXSA9IHN0cmluZygxOS12W2ldLnNpemUoKSwgJzAnKSArIHZbaV07CiAgICB9CiAgICBUcmllIHRyOwogICAgZmluKDAsIG4pIHRyLmluc2VydCh2W2ldKTsKICAgIGxsIHE7IGNpbiA+PiBxOwogICAgd2hpbGUgKHEtLSkgewogICAgICAgIGZpbigwLCAxMCkgewogICAgICAgICAgICBpbnQgeDsgY2luID4+IHg7CiAgICAgICAgICAgIG1wW3hdID0gaTsKICAgICAgICAgICAgbXAyW2ldID0geDsKICAgICAgICB9CiAgICAgICAgc3RyaW5nIHg7IGNpbiAgPj4geDsKICAgICAgICB4ID0gc3RyaW5nKDE5LXguc2l6ZSgpLCAnMCcpK3g7CiAgICAgICAgY291dCA8PCB0ci5xdWVyeSh4KSA8PCAiXG4iOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIEZBU1Q7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwidyIsc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdHQgPSAxOyAvL2NpbiA+PiB0dDsKICAgIHdoaWxlKHR0LS0pewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==