#include #include #include using namespace std; #define FF(x, y, z) for(int x =y; x < z; x++) int main() { int n, m; cin >> n >> m; string s; cin >> s; vector next; next.resize(s.size()); vector> starts; starts.resize('z' - 'a' + 1); FF(i, 0, s.size()) { next[i] = i == s.size() - 1 ? -2 : i+1; starts[s[i]].push_back(i); } FF(i, 0, m) { int x; cin >> x; string repl; cin >> repl; char start_c = repl[0]; int res = 0; FF(pos, 0, starts[start_c].size()) { int idx = starts[start_c][pos]; FF(k, 0, repl.size()) { if (idx < 0){ idx = -1; break; } if (s[idx] != repl[k]) idx = -1; else idx = next[idx]; } if (idx == -1) continue; int s_i = starts[start_c][pos]; while (s_i != idx) { int o_s_i = s_i; s_i = next[s_i]; next[o_s_i] =-1; } int s_i2 = 0; for(s_i2 = 0; next[s_i2] != -1; s_i2++){} while (next[s_i2] != starts[start_c][pos]) s_i2 = next[s_i2]; next[s_i2] = idx; res++; } cout << res << endl; } exit(0); return 0; }