#include <bits/stdc++.h>
using namespace std;
const int MaxN = 1e5;
int n, len;
int c[4][11][11][MaxN + 5], v[500];
char s[MaxN + 5], t[15];
int Lowbit(int x) { return (x & (-x)); }
void Add(int tag, int le, int mod, int x, int w) {
  int p = x;
  while (p <= len) {
    c[tag][le][mod][p] += w;
    p += Lowbit(p);
  }
}
int Ask(int tag, int le, int mod, int x) {
  int p = x;
  int ans = 0;
  while (p > 0) {
    ans += c[tag][le][mod][p];
    p -= Lowbit(p);
  }
  return ans;
}
int main() {
  v['A'] = 0;
  v['C'] = 1;
  v['G'] = 2;
  v['T'] = 3;
  scanf("%s", s + 1);
  len = strlen(s + 1);
  for (int i = 1; i <= len; i++)
    for (int j = 1; j <= 10; j++) Add(v[s[i]], j, i % j, i, 1);
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int flag, l, r;
    scanf("%d", &flag);
    if (flag == 1) {
      scanf("%d", &l);
      scanf("%s", t);
      for (int j = 1; j <= 10; j++) {
        Add(v[s[l]], j, l % j, l, -1);
        Add(v[t[0]], j, l % j, l, 1);
      }
      s[l] = t[0];
    } else {
      scanf("%d%d", &l, &r);
      scanf("%s", t);
      int len1 = strlen(t);
      int ans = 0;
      for (int j = 0; j < len1; j++) {
        if (l + j > r) break;
        if (l + j == 1)
          ans += Ask(v[t[j]], len1, (l + j) % len1, r);
        else
          ans += (Ask(v[t[j]], len1, (l + j) % len1, r) -
                  Ask(v[t[j]], len1, (l + j) % len1, l - 1));
      }
      printf("%d\n", ans);
    }
  }
}
