#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int lb(int x) { return x & -x; }
struct Fenwick {
  int f[MAXN];
  void add(int ind, int x) {
    while (ind < MAXN) {
      f[ind] += x;
      ind += lb(ind);
    }
  }
  int get(int ind) {
    int ret = 0;
    while (ind > 0) {
      ret += f[ind];
      ind -= lb(ind);
    }
    return ret;
  }
  int getR(int l, int r) { return get(r) - get(l - 1); }
};
Fenwick t[4][10][10];
string s;
int q;
int main() {
  cin >> s;
  s = " " + s;
  map<char, int> m;
  m['A'] = 0;
  m['T'] = 1;
  m['G'] = 2;
  m['C'] = 3;
  for (int i = 1; i < s.size(); i++) {
    int ind = m[s[i]];
    for (int j = 1; j <= 10; j++) t[ind][i % j][j - 1].add(i, 1);
  }
  cin >> q;
  while (q--) {
    int op;
    cin >> op;
    if (op == 1) {
      int x;
      cin >> x;
      char c;
      cin >> c;
      int old = m[s[x]];
      for (int i = 1; i <= 10; i++) t[old][x % i][i - 1].add(x, -1);
      for (int i = 1; i <= 10; i++) t[m[c]][x % i][i - 1].add(x, 1);
      s[x] = c;
    } else {
      int l, r;
      string e;
      cin >> l >> r >> e;
      int ans = 0;
      for (int i = 0; i < e.size(); i++)
        ans += t[m[e[i]]][(l + i) % e.size()][e.size() - 1].getR(l, r);
      cout << ans << "\n";
    }
  }
}
