#include <bits/stdc++.h>
const int maxn = 1e5 + 10;
const int N = 5e2 + 10;
using namespace std;
long long gcd(long long p, long long q) { return q == 0 ? p : gcd(q, p % q); }
long long qpow(long long p, long long q) {
  long long f = 1;
  while (q) {
    if (q & 1) f = f * p % 1000000007;
    p = p * p % 1000000007;
    q >>= 1;
  }
  return f;
}
int n, m, k, t;
vector<int> d[4][11][10];
char a[maxn], b[maxn];
int gao(char p) {
  if (p == 'A')
    return 0;
  else if (p == 'T')
    return 1;
  else if (p == 'G')
    return 2;
  else
    return 3;
}
void add(vector<int>& d, int x, int y) {
  while (x < d.size()) d[x] += y, x += x & (-x);
}
int get(vector<int>& d, int x) {
  int ret = 0;
  while (x) ret += d[x], x -= x & (-x);
  return ret;
}
int main() {
  int i, j;
  scanf("%s", a + 1);
  n = strlen(a + 1);
  for (i = 0; i <= (int)3; i++)
    for (j = 1; j <= (int)10; j++)
      for (k = 0; k <= (int)j - 1; k++) d[i][j][k].resize((n + j - 1) / j + 1);
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= 10; j++) {
      add(d[gao(a[i])][j][(i - 1) % j], (i - 1) / j + 1, 1);
    }
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int op, x, y;
    scanf("%d%d", &op, &x);
    if (op == 1) {
      scanf("%s", b);
      for (i = 1; i <= (int)10; i++)
        add(d[gao(a[x])][i][(x - 1) % i], (x - 1) / i + 1, -1);
      for (i = 1; i <= (int)10; i++)
        add(d[gao(b[0])][i][(x - 1) % i], (x - 1) / i + 1, 1);
      a[x] = b[0];
    } else {
      scanf("%d%s", &y, b);
      int len = strlen(b), ret = 0;
      for (i = 0; i < len && i < y - x + 1; i++) {
        int mo = (i + x - 1) % len;
        ret += get(d[gao(b[i])][len][mo], (y - 1 - mo) / len + 1) -
               get(d[gao(b[i])][len][mo], (x - 1 + len - 1 - mo) / len);
      }
      printf("%d\n", ret);
    }
  }
  return 0;
}
