#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n;
int a[4][11][11][maxn];
int getlowbit(int x) { return x & (-x); }
void add(int i, int j, int k, int l, int x) {
  while (l <= n) {
    a[i][j][k][l] += x;
    l += getlowbit(l);
  }
}
int query(int i, int j, int k, int l) {
  int ans = 0;
  while (l) {
    ans += a[i][j][k][l];
    l -= getlowbit(l);
  }
  return ans;
}
int getInt(char ch) {
  if (ch == 'A')
    return 0;
  else if (ch == 'T')
    return 1;
  else if (ch == 'C')
    return 2;
  else
    return 3;
}
char str[maxn];
int main() {
  scanf("%s", str);
  n = strlen(str);
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= 10; j++) {
      add(getInt(str[i]), j, (i + 1) % j, i + 1, 1);
    }
  }
  int q;
  cin >> q;
  char ch[12];
  int id, l, r;
  while (q--) {
    scanf("%d", &id);
    if (id == 1) {
      scanf("%d %s", &l, ch);
      for (int i = 1; i <= 10; i++) {
        add(getInt(str[l - 1]), i, l % i, l, -1);
        add(getInt(ch[0]), i, l % i, l, 1);
      }
      str[l - 1] = ch[0];
    } else {
      scanf("%d%d%s", &l, &r, ch);
      int m = strlen(ch);
      int ans = 0;
      for (int i = 0; i < m; i++) {
        ans += query(getInt(ch[i]), m, (l + i) % (m), r) -
               query(getInt(ch[i]), m, (l + i) % (m), l - 1);
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
