#include <iostream>
#include<bits/stdc++.h>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <utility>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include<algorithm>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define IOF ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#define ll long long
#define ld long double
#define cy cout << "YES" << '\n';
#define cn cout << "NO" << '\n';
using namespace std;
using namespace __gnu_pbds;
template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int dx[] = {1, 0, -1, 0, -1, -1, 1, 1};
int dy[] = {0, -1, 0, 1, -1, 1, -1, 1};
int knightX[] = {-2, -2, 2, 2, 1, 1 , -1, -1};
int knighty[] = {-1, 1, -1, 1, -2, 2, -2, 2};
char di[] = {'D', 'L', 'U', 'R'};
const int N =1e7+5 , M = 1e4+5;
const ll mod = 1e9+7;
const int LOG = 30;
void FOI() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
}
//check ur idea
int n , k ;
string s;
vector<vector<int>> v;
vector<ll> dp;
ll calc(int idx){
if(idx >= n)return 0;
ll & ret = dp[idx];
if(~ret)return ret;
ret = 1e9;
for(int i = 0 ; i < k ;i++){
auto it = upper_bound(v[i].begin() , v[i].end() , idx)- v[i].begin();
if(it >= v[i].size()){
return ret = 1;
}
ret = min(ret , calc(v[i][it])+1);
}
return ret;
}
void solve(){
cin >> n >> k >> s;
v.resize(26);
dp.resize(n);
for(int i = 0 ; i < n ; i++){
v[s[i] - 'a'].push_back(i);
dp[i] = -1;
}
int q ; cin >> q;
while(q--){
string t ; cin >> t;
int pos = -1;
bool is = false;
for (auto &&i : t)
{
int x = i-'a';
auto it = upper_bound(v[x].begin() , v[x].end() , pos) - v[x].begin();
if(it >= v[x].size()){
is = true;
break;
}
pos = v[x][it];
}
if(is){
cout << 0 << '\n';
continue;
}
cout << calc(pos) << '\n';
}
}
signed main() {
IOF
//freopen("tug.in", "r", stdin);
//FOI();
ll t = 1;
// cin >> t;
while (t--) {
solve() ;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgSU9GIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cik7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBjeSBjb3V0IDw8ICJZRVMiIDw8ICdcbic7CiNkZWZpbmUgY24gY291dCA8PCAiTk8iIDw8ICdcbic7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwoKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9tdWx0aXNldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CgppbnQgZHhbXSA9IHsxLCAwLCAtMSwgMCwgLTEsIC0xLCAxLCAxfTsKaW50IGR5W10gPSB7MCwgLTEsIDAsIDEsIC0xLCAxLCAtMSwgMX07CmludCBrbmlnaHRYW10gPSB7LTIsIC0yLCAyLCAyLCAxLCAxICwgLTEsIC0xfTsKaW50IGtuaWdodHlbXSA9IHstMSwgMSwgLTEsIDEsIC0yLCAyLCAtMiwgMn07CmNoYXIgZGlbXSA9IHsnRCcsICdMJywgJ1UnLCAnUid9Owpjb25zdCBpbnQgTiA9MWU3KzUgLCBNID0gMWU0KzU7CmNvbnN0IGxsIG1vZCA9ICAxZTkrNzsKY29uc3QgaW50IExPRyA9IDMwOwp2b2lkIEZPSSgpIHsKICAgICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiAgfQovL2NoZWNrIHVyIGlkZWEKCmludCBuICwgayA7CnN0cmluZyBzOwp2ZWN0b3I8dmVjdG9yPGludD4+IHY7CnZlY3RvcjxsbD4gZHA7CmxsIGNhbGMoaW50IGlkeCl7CiAgaWYoaWR4ID49IG4pcmV0dXJuIDA7CiAgbGwgJiByZXQgPSBkcFtpZHhdOwogIGlmKH5yZXQpcmV0dXJuIHJldDsKICByZXQgPSAxZTk7CiAgZm9yKGludCBpID0gMCA7IGkgPCBrIDtpKyspewogICAgYXV0byBpdCA9IHVwcGVyX2JvdW5kKHZbaV0uYmVnaW4oKSAsIHZbaV0uZW5kKCkgLCBpZHgpLSB2W2ldLmJlZ2luKCk7CiAgICBpZihpdCA+PSB2W2ldLnNpemUoKSl7CiAgICAgIHJldHVybiByZXQgPSAxOwogICAgfQogICAgcmV0ID0gbWluKHJldCAsIGNhbGModltpXVtpdF0pKzEpOwogIH0KICByZXR1cm4gcmV0Owp9Cgp2b2lkIHNvbHZlKCl7CmNpbiA+PiBuID4+IGsgPj4gczsKdi5yZXNpemUoMjYpOwpkcC5yZXNpemUobik7CmZvcihpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyl7CiAgdltzW2ldIC0gJ2EnXS5wdXNoX2JhY2soaSk7CiAgZHBbaV0gPSAtMTsKfQppbnQgcSA7IGNpbiA+PiBxOwp3aGlsZShxLS0pewogIHN0cmluZyB0IDsgY2luID4+IHQ7CiAgaW50IHBvcyA9IC0xOwogIGJvb2wgaXMgPSBmYWxzZTsKICBmb3IgKGF1dG8gJiZpIDogdCkKICB7CiAgICBpbnQgeCA9IGktJ2EnOwogICBhdXRvIGl0ID0gdXBwZXJfYm91bmQodlt4XS5iZWdpbigpICwgdlt4XS5lbmQoKSAsIHBvcykgLSB2W3hdLmJlZ2luKCk7CiAgIGlmKGl0ID49IHZbeF0uc2l6ZSgpKXsKICAgICBpcyA9IHRydWU7CiAgICAgYnJlYWs7CiAgIH0KICAgcG9zID0gdlt4XVtpdF07CiAgfQogIGlmKGlzKXsKICAgIGNvdXQgPDwgMCA8PCAnXG4nOwogICAgY29udGludWU7CiAgfQogIGNvdXQgPDwgY2FsYyhwb3MpIDw8ICdcbic7Cn0KCn0KCgoKCgpzaWduZWQgbWFpbigpIHsKICBJT0YKICAvL2ZyZW9wZW4oInR1Zy5pbiIsICJyIiwgc3RkaW4pOwogIC8vRk9JKCk7CgogICAgbGwgdCA9IDE7CiAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewoKICAgIHNvbHZlKCkgOwoKICAgIH0KCiAKICAgIHJldHVybiAwOwp9