#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3;
int bit[4][11][11][N], q;
char s[N], t[15];
void add(int *b, int i, int v) {
  i += 2;
  while (i < N) b[i] += v, i += i & -i;
}
int query(int *b, int i) {
  int ans = 0;
  i += 2;
  while (i) ans += b[i], i -= i & -i;
  return ans;
}
int query(int *b, int l, int r) { return query(b, r) - query(b, l - 1); }
int ctoi(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%d", s, &q);
  for (int i = 0; s[i]; ++i) {
    s[i] = ctoi(s[i]);
    for (int j = 1; j <= 10; ++j) add(bit[s[i]][j][i % j], i, 1);
  }
  for (int i = 0; i < q; ++i) {
    int tp;
    scanf("%d", &tp);
    if (tp == 1) {
      char c;
      int p;
      scanf("%d %c", &p, &c);
      p--;
      for (int j = 1; j <= 10; ++j) add(bit[s[p]][j][p % j], p, -1);
      s[p] = ctoi(c);
      for (int j = 1; j <= 10; ++j) add(bit[s[p]][j][p % j], p, +1);
    } else {
      int l, r;
      scanf("%d%d%s", &l, &r, t);
      l--, r--;
      int n = strlen(t);
      int ans = 0;
      for (int j = 0; j < n; ++j) {
        t[j] = ctoi(t[j]);
        ans += query(bit[t[j]][n][(l + j) % n], l, r);
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
