#include <bits/stdc++.h>
using namespace std;
int a[60][4][100005];
int change(char ch) {
  if (ch == 'A') return 0;
  if (ch == 'T') return 1;
  if (ch == 'G') return 2;
  return 3;
}
void update(int *f, int pos, int x) {
  while (pos < 100005) {
    f[pos] += x;
    pos += pos & -pos;
  }
}
int SUM(int *f, int pos) {
  int ans = 0;
  while (pos) {
    ans += f[pos];
    pos -= pos & -pos;
  }
  return ans;
}
char s[100005], str[100005];
int main() {
  scanf("%s", s + 1);
  int len = strlen(s + 1), op, l, r, x, y, n, m;
  for (int i = 1; i <= len; i++) {
    for (int k = 1; k <= 10; k++) {
      x = k * (k - 1) / 2;
      if (i % k == 0)
        x += k;
      else
        x += (i % k);
      y = change(s[i]);
      update(a[x][y], i, 1);
    }
  }
  scanf("%d", &n);
  while (n--) {
    scanf("%d", &op);
    if (op == 1) {
      scanf("%d", &x);
      scanf("%s", str);
      for (int i = 1; i <= 10; i++) {
        int y = i * (i - 1) / 2;
        if (x % i == 0)
          y += i;
        else
          y += (x % i);
        update(a[y][change(s[x])], x, -1);
        update(a[y][change(str[0])], x, 1);
      }
      s[x] = str[0];
    } else {
      scanf("%d%d", &l, &r);
      scanf("%s", str);
      m = strlen(str);
      int ans = 0;
      y = m * (m - 1) / 2;
      if (l % m == 0)
        x = m;
      else
        x = (l % m);
      x--;
      for (int i = 0; i < m; i++) {
        x++;
        if (x > m) x -= m;
        ans -= SUM(a[y + x][change(str[i])], l - 1);
        ans += SUM(a[y + x][change(str[i])], r);
      }
      printf("%d\n", ans);
    }
  }
}
