#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define FOR(i, x, y) for (int i = x, _y = y; i <= _y; ++i)
#define FOD(i, x, y) for (int i = x, _y = y; i >= _y; --i)
#define em emplace
#define emb emplace_back
#define fi first
#define se second
template<typename T1, typename T2> bool Tmax (T1 &a, const T2 &b) {if (a < b) {a = b;return true;} return false;}
template<typename T1, typename T2> bool Tmin (T1 &a, const T2 &b) {if (a > b) {a = b;return true;} return false;}
void File () {
#define NAME "TEST"
if (fopen(NAME".inp", "r")) {
freopen(NAME".inp", "r", stdin);
freopen(NAME".out", "w", stdout);
}
else {
#undef NAME
#define NAME "D:\\CPP\\AIO\\Test"
if (fopen(NAME".inp", "r")) {
freopen(NAME".inp", "r", stdin);
freopen(NAME".out", "w", stdout);
}
}
}
const char el = '\n';
const int MAXN = 1e6 + 7;
const int INF = 1e9;
const long long MOD = 1e9 + 7;
const long long oo = 1e18;
struct Trie {
struct Node {
int c[2];
int cnt, exist;
Node (): cnt(0), exist(0) { memset(c, -1, sizeof c); }
};
vector<Node> nodes;
int cur;
Trie(): cur(0) {
nodes.emb(Node());
}
ll ans = 0;
int new_node() {
nodes.emb(Node());
return ++cur;
}
void add (string x) {
int pos = 0;
for (char f : x) {
int c = f - '0';
if (nodes[pos].c[c] == -1) {
int T = new_node();
nodes[pos].c[c] = T;
}
pos = nodes[pos].c[c];
++nodes[pos].cnt;
}
++nodes[pos].exist;
}
int get (string x) {
int pos = 0;
int temp = 0;
for (char f : x) {
int c = f - '0';
if (nodes[pos].c[c] == -1) {
return temp;
}
pos = nodes[pos].c[c];
temp += nodes[pos].exist;
}
return nodes[pos].cnt + temp - nodes[pos].exist;
}
} Tri;
int M, N;
signed main () {
ios_base::sync_with_stdio(NULL);
cin.tie(NULL); cout.tie(NULL);
File();
cin >> M >> N;
FOR(i, 1, M) {
string S = "";
int sz; cin >> sz;
FOR(j, 1, sz) {
char x; cin >> x;
S += x;
}
Tri.add(S);
}
FOR(i, 1, N) {
string S = "";
int sz; cin >> sz;
FOR(j, 1, sz) {
char x; cin >> x;
S += x;
}
cout << Tri.get(S) << el;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwoKI2RlZmluZSBGT1IoaSwgeCwgeSkgZm9yIChpbnQgaSA9IHgsIF95ID0geTsgaSA8PSBfeTsgKytpKQojZGVmaW5lIEZPRChpLCB4LCB5KSBmb3IgKGludCBpID0geCwgX3kgPSB5OyBpID49IF95OyAtLWkpCiNkZWZpbmUgZW0gZW1wbGFjZQojZGVmaW5lIGVtYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAoKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIFRtYXggKFQxICZhLCBjb25zdCBUMiAmYikge2lmIChhIDwgYikge2EgPSBiO3JldHVybiB0cnVlO30gcmV0dXJuIGZhbHNlO30KdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIFRtaW4gKFQxICZhLCBjb25zdCBUMiAmYikge2lmIChhID4gYikge2EgPSBiO3JldHVybiB0cnVlO30gcmV0dXJuIGZhbHNlO30KCnZvaWQgRmlsZSAoKSB7CiAgICAjZGVmaW5lIE5BTUUgIlRFU1QiCiAgICBpZiAoZm9wZW4oTkFNRSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oTkFNRSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihOQU1FIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9ICAgIAogICAgZWxzZSB7CiAgICAgICAgI3VuZGVmIE5BTUUgCiAgICAgICAgI2RlZmluZSBOQU1FICJEOlxcQ1BQXFxBSU9cXFRlc3QiCiAgICAgICAgaWYgKGZvcGVuKE5BTUUiLmlucCIsICJyIikpIHsKICAgICAgICAgICAgZnJlb3BlbihOQU1FIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICAgICAgZnJlb3BlbihOQU1FIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICAgICAgfSAgICAKICAgIH0KfQoKY29uc3QgY2hhciBlbCA9ICdcbic7CmNvbnN0IGludCBNQVhOID0gMWU2ICsgNzsKY29uc3QgaW50IElORiA9IDFlOTsKY29uc3QgbG9uZyBsb25nIE1PRCA9IDFlOSArIDc7CmNvbnN0IGxvbmcgbG9uZyBvbyA9IDFlMTg7CgpzdHJ1Y3QgVHJpZSB7CiAgICBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgaW50IGNbMl07CiAgICAgICAgaW50IGNudCwgZXhpc3Q7CiAgICAgICAgTm9kZSAoKTogY250KDApLCBleGlzdCgwKSB7IG1lbXNldChjLCAtMSwgc2l6ZW9mIGMpOyB9CiAgICB9OwogICAgdmVjdG9yPE5vZGU+IG5vZGVzOwoKICAgIGludCBjdXI7CiAgICBUcmllKCk6IGN1cigwKSB7CiAgICAgICAgbm9kZXMuZW1iKE5vZGUoKSk7CiAgICB9CgogICAgbGwgYW5zID0gMDsKCiAgICBpbnQgbmV3X25vZGUoKSB7CiAgICAgICAgbm9kZXMuZW1iKE5vZGUoKSk7CiAgICAgICAgcmV0dXJuICsrY3VyOwogICAgfQoKICAgIHZvaWQgYWRkIChzdHJpbmcgeCkgewogICAgICAgIGludCBwb3MgPSAwOwogICAgICAgIGZvciAoY2hhciBmIDogeCkgewogICAgICAgICAgICBpbnQgYyA9IGYgLSAnMCc7CiAgICAgICAgICAgIGlmIChub2Rlc1twb3NdLmNbY10gPT0gLTEpIHsKICAgICAgICAgICAgICAgIGludCBUID0gbmV3X25vZGUoKTsKICAgICAgICAgICAgICAgIG5vZGVzW3Bvc10uY1tjXSA9IFQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG9zID0gbm9kZXNbcG9zXS5jW2NdOwogICAgICAgICAgICArK25vZGVzW3Bvc10uY250OwogICAgICAgIH0KICAgICAgICArK25vZGVzW3Bvc10uZXhpc3Q7CiAgICB9CgogICAgaW50IGdldCAoc3RyaW5nIHgpIHsKICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICBpbnQgdGVtcCA9IDA7CiAgICAgICAgZm9yIChjaGFyIGYgOiB4KSB7CiAgICAgICAgICAgIGludCBjID0gZiAtICcwJzsKICAgICAgICAgICAgaWYgKG5vZGVzW3Bvc10uY1tjXSA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG9zID0gbm9kZXNbcG9zXS5jW2NdOwogICAgICAgICAgICB0ZW1wICs9IG5vZGVzW3Bvc10uZXhpc3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub2Rlc1twb3NdLmNudCArIHRlbXAgLSBub2Rlc1twb3NdLmV4aXN0OwogICAgfQp9IFRyaTsKCmludCBNLCBOOwoKc2lnbmVkIG1haW4gKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhOVUxMKTsKICAgIGNpbi50aWUoTlVMTCk7IGNvdXQudGllKE5VTEwpOwoKICAgIEZpbGUoKTsKCiAgICBjaW4gPj4gTSA+PiBOOwoKICAgIEZPUihpLCAxLCBNKSB7CiAgICAgICAgc3RyaW5nIFMgPSAiIjsKICAgICAgICBpbnQgc3o7IGNpbiA+PiBzejsKICAgICAgICBGT1IoaiwgMSwgc3opIHsKICAgICAgICAgICAgY2hhciB4OyBjaW4gPj4geDsKICAgICAgICAgICAgUyArPSB4OwogICAgICAgIH0KICAgICAgICBUcmkuYWRkKFMpOwogICAgfQoKICAgIEZPUihpLCAxLCBOKSB7CiAgICAgICAgc3RyaW5nIFMgPSAiIjsKICAgICAgICBpbnQgc3o7IGNpbiA+PiBzejsKICAgICAgICBGT1IoaiwgMSwgc3opIHsKICAgICAgICAgICAgY2hhciB4OyBjaW4gPj4geDsKICAgICAgICAgICAgUyArPSB4OwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IFRyaS5nZXQoUykgPDwgZWw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K