#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
struct bit {
  int a[N];
  int lowbit(int x) { return x & (-x); }
  int query(int x) {
    int ans = 0;
    for (int i = x; i > 0; i -= lowbit(i)) ans += a[i];
    return ans;
  }
  void add(int x, int y) {
    for (int i = x; i < N; i += lowbit(i)) a[i] += y;
  }
} bit[4][11][10];
void add(int id, int pos, int flag) {
  for (int i = 1; i <= 10; i++) {
    bit[id][i][pos % i].add(pos, flag);
  }
}
char s[N];
int main() {
  int map[256];
  map['A'] = 0;
  map['G'] = 1;
  map['T'] = 2;
  map['C'] = 3;
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  for (int i = 1; i <= n; i++) add(map[s[i]], i, 1);
  int m;
  int cd, x, y;
  char str[15];
  scanf("%d", &m);
  while (m--) {
    scanf("%d", &cd);
    if (cd == 1) {
      scanf("%d%s", &x, str);
      add(map[s[x]], x, -1);
      s[x] = str[0];
      add(map[s[x]], x, 1);
    } else {
      scanf("%d%d%s", &x, &y, str);
      int l = strlen(str);
      int ans = 0;
      for (int i = 0; i < l; i++) {
        int pos = (i + x) % l;
        ans += bit[map[str[i]]][l][pos].query(y) -
               bit[map[str[i]]][l][pos].query(x - 1);
      }
      printf("%d\n", ans);
    }
  }
  return 0;
}
