#include <bits/stdc++.h>   using namespace std;   template <typename T>   bool chmax(T& a, const T& b) {     return a < b ? (a = b, true) : false;   }   template <typename T>   bool chmin(T& a, const T& b) {     return b < a ? (a = b, true) : false;   }   int N, Q;   const int MAX_N = 100000;   const int BUCKET = 100, SIZE = 1000;   char S[MAX_N + 17];   int bucketCnt[BUCKET][10][11][4];   int getId(char c) {     if (c ==  A ) return 0;     if (c ==  C ) return 1;     if (c ==  G ) return 2;     return 3;   }   void init() {     for (int i = (int)(0); i < (int)(N); i++) {       int bucketL = i / SIZE * SIZE;       for (int j = (int)(1); j < (int)(11); j++) {         bucketCnt[i / SIZE][(i - bucketL) % j][j][getId(S[i])]++;       }     }   }   void change(int idx, char c) {     int bucketL = idx / SIZE * SIZE;     for (int j = (int)(1); j < (int)(11); j++) {       bucketCnt[idx / SIZE][(idx - bucketL) % j][j][getId(S[idx])]--;     }     S[idx] = c;     for (int j = (int)(1); j < (int)(11); j++) {       bucketCnt[idx / SIZE][(idx - bucketL) % j][j][getId(S[idx])]++;     }   }   int getImpact(int l, int r, int M, char e[]) {     int res = 0;     for (int i = (int)(0); i < (int)(BUCKET); i++) {       int bucketL = i * SIZE, bucketR = min(N, (i + 1) * SIZE);       if (r <= bucketL || bucketR <= l) continue;       if (l <= bucketL && bucketR <= r) {         for (int j = (int)(0); j < (int)(min(M, bucketR - bucketL)); j++) {           int x = (bucketL + j - l) % M;           res += bucketCnt[i][j][M][getId(e[x])];         }         continue;       }       for (int j = (int)(max(bucketL, l)); j < (int)(min(bucketR, r)); j++) {         int x = (j - l) % M;         res += e[x] == S[j];       }     }     return res;   }   int main() {     scanf( %s , S);     N = strlen(S);     init();     scanf( %d , &Q);     for (int i = (int)(0); i < (int)(Q); i++) {       int t;       scanf( %d , &t);       if (t == 1) {         int x;         char c[17];         scanf( %d%s , &x, c);         x--;         change(x, c[0]);       } else {         int l, r;         char e[17];         scanf( %d%d%s , &l, &r, e);         l--;         int M = strlen(e);         printf( %d n , getImpact(l, r, M, e));       }     }     return 0;   }   