#include using namespace std; using ll = long long; inline int encode(string& s, int start) { return (s[start] - 'a') * 26 * 26 + (s[start + 1] - 'a') * 26 + (s[start + 2] - 'a'); } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); const int ALL = 26 * 26 * 26; int N, Q; cin >> N >> Q; int k = (int)sqrt(N); if (k * k < N) k++; string state; cin >> state; vector> sum(ALL, vector(k)); vector> count(ALL, vector(k)); for (int i = 0; i < N - 2; i++) { int code = encode(state, i); int b = i / k; int rel = i - b * k; sum[code][b] += rel + 1; count[code][b]++; } for (int i = 0; i < Q; i++) { int q; cin >> q; if (q == 1) { int p; cin >> p; p--; char x; cin >> x; for (int j = p - 2; j <= p; j++) { if (j < 0 || j >= N - 2) continue; int c = encode(state, j); int b = j / k; int rel = j - b * k; sum[c][b] -= rel + 1; count[c][b]--; } state[p] = x; for (int j = p - 2; j <= p; j++) { if (j < 0 || j >= N - 2) continue; int c = encode(state, j); int b = j / k; int rel = j - b * k; sum[c][b] += rel + 1; count[c][b]++; } } else if (q == 2) { int l; cin >> l; l--; int r; cin >> r; string a; cin >> a; int code = encode(a, 0); int fl = l; long ans = 0; while (l < r - 2) { if (l % k == 0 && l + k <= r - 2) { ans += (l - fl) * count[code][l / k] + sum[code][l / k]; l += k; } else { if (encode(state, l) == code) ans += (l - fl) + 1; l++; } } cout << ans << endl; } } }