/*
next[i][j] = first index of character j occurring after index i, or -1 if DNE
cnt[i] = # of characters required
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, k; cin >> n >> k;
string s; cin >> s;
vector<vector<int>> next(n, vector<int>(k, -1));
for (int j = 0; j < k; j++) {
int idx = -1;
for (int i = n - 1; i >= 0; i--) {
next[i][j] = idx;
if (s[i] == (j + 'a')) idx = i;
}
}
vector<int> last(n, 0);
map<int, int> mp;
for (int i = n - 1; i >= 0; i--) {
if (mp.size() < k) {
last[i] = 1;
} else {
int mn = INT_MAX;
for (auto p : mp) mn = min(mn, p.second);
last[i] = mn + 1;
}
mp[(s[i] - 'a')] = last[i];
}
int q; cin >> q;
while (q--) {
string t; cin >> t;
int index = t[0] == s[0] ? 0 : next[0][(t[0] - 'a')];
int i;
for (i = 1; i < (int) t.size() && index != -1; i++) {
index = next[index][(t[i] - 'a')];
}
cout << (index == -1 ? 0 : last[index]) << '\n';
}
}
LyoKbmV4dFtpXVtqXSA9IGZpcnN0IGluZGV4IG9mIGNoYXJhY3RlciBqIG9jY3VycmluZyBhZnRlciBpbmRleCBpLCBvciAtMSBpZiBETkUKY250W2ldID0gIyBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIAoqLwoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWNpbi50aWUoMCktPnN5bmNfd2l0aF9zdGRpbygwKTsKCQlpbnQgbiwgazsgY2luID4+IG4gPj4gazsKCQlzdHJpbmcgczsgY2luID4+IHM7CgkJCgkJdmVjdG9yPHZlY3RvcjxpbnQ+PiBuZXh0KG4sIHZlY3RvcjxpbnQ+KGssIC0xKSk7CgkJCgkJZm9yIChpbnQgaiA9IDA7IGogPCBrOyBqKyspIHsKCQkJaW50IGlkeCA9IC0xOwoJCQlmb3IgKGludCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJCQluZXh0W2ldW2pdID0gaWR4OwoJCQkJaWYgKHNbaV0gPT0gKGogKyAnYScpKSBpZHggPSBpOwoJCQl9CgkJfQoKCQl2ZWN0b3I8aW50PiBsYXN0KG4sIDApOwoJCW1hcDxpbnQsIGludD4gbXA7IAoJCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKCQkJaWYgKG1wLnNpemUoKSA8IGspIHsKCQkJCWxhc3RbaV0gPSAxOwoJCQl9IGVsc2UgewoJCQkJaW50IG1uID0gSU5UX01BWDsKCQkJCWZvciAoYXV0byBwIDogbXApIG1uID0gbWluKG1uLCBwLnNlY29uZCk7CgkJCQlsYXN0W2ldID0gbW4gKyAxOwoJCQl9CgkJCW1wWyhzW2ldIC0gJ2EnKV0gPSBsYXN0W2ldOwoJCX0KCQkKCQlpbnQgcTsgY2luID4+IHE7CgkJd2hpbGUgKHEtLSkgewoJCQlzdHJpbmcgdDsgY2luID4+IHQ7CgkJCWludCBpbmRleCA9IHRbMF0gPT0gc1swXSA/IDAgOiBuZXh0WzBdWyh0WzBdIC0gJ2EnKV07CgkJCWludCBpOwoJCQlmb3IgKGkgPSAxOyBpIDwgKGludCkgdC5zaXplKCkgJiYgaW5kZXggIT0gLTE7IGkrKykgewoJCQkJaW5kZXggPSBuZXh0W2luZGV4XVsodFtpXSAtICdhJyldOwoJCQl9CgkJCWNvdXQgPDwgKGluZGV4ID09IC0xID8gMCA6IGxhc3RbaW5kZXhdKSA8PCAnXG4nOwkKCQl9Cn0KCQkJCgkJCQkKCQkJCQoKCQkKCQkK