#include <bits/stdc++.h>
using namespace std;
struct bit {
  int c[100010];
  void add(int x, int v) {
    while (x < 100005) {
      c[x] += v;
      x += (x & -x);
    }
  }
  int sum(int x) {
    int ans = 0;
    while (x > 0) {
      ans += c[x];
      x -= (x & -x);
    }
    return ans;
  }
} tree[4][11][11];
char s[100005];
int id(char c) {
  if (c == 'A') return 0;
  if (c == 'T') return 1;
  if (c == 'G') return 2;
  if (c == 'C') return 3;
}
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= 10; j++) tree[id(s[i])][j][i % j].add(i, 1);
  int m;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      int pos;
      char t[20];
      scanf("%d%s", &pos, t + 1);
      for (int j = 1; j <= 10; j++) {
        tree[id(s[pos])][j][pos % j].add(pos, -1);
        tree[id(t[1])][j][pos % j].add(pos, 1);
      }
      s[pos] = t[1];
    } else {
      int l, r;
      scanf("%d%d", &l, &r);
      char t[20];
      scanf("%s", t + 1);
      int len = strlen(t + 1);
      int ans = 0;
      for (int j = 1; j <= len; j++) {
        ans += tree[id(t[j])][len][(l + j - 1) % len].sum(r) -
               tree[id(t[j])][len][(l + j - 1) % len].sum(l - 1);
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
