#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long double pi = acos(-1);
const int MOD = 1e9 + 7;
const long long int LINF = 0x3f3f3f3f3f3f3f3f;
int m(int b, int e) { return (b + e) / 2; }
class RSQ {
 public:
  vector<int> tr;
  void build(int n) { tr.resize(n * 4 + 30, 0); }
  void update(int nd, int b, int e, int i, int v) {
    if (i > e or i < b) return;
    if (b == e) {
      tr[nd] = v;
      return;
    }
    update(nd * 2, b, m(b, e), i, v);
    update(nd * 2 + 1, m(b, e) + 1, e, i, v);
    tr[nd] = tr[nd * 2] + tr[nd * 2 + 1];
  }
  int query(int nd, int b, int e, int i, int j) {
    if (b > j or e < i) return 0;
    if (b >= i and e <= j) return tr[nd];
    return query(nd * 2, b, m(b, e), i, j) +
           query(nd * 2 + 1, m(b, e) + 1, e, i, j);
  }
};
int geti(char c) {
  if (c == 'A') return 0;
  if (c == 'T') return 1;
  if (c == 'G') return 2;
  return 3;
}
string s;
int n;
RSQ Seg[12][11][5];
int solve(int l, int r, string &e) {
  int ret = 0;
  int tam = e.size();
  for (int i = 0; i < tam; i++) {
    int idx = geti(e[i]);
    int mod = (i + l) % tam;
    int tmp = Seg[tam][mod][idx].query(1, 0, n - 1, l, r);
    ret += Seg[tam][mod][idx].query(1, 0, n - 1, l, r);
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  ;
  cin >> s;
  n = s.size();
  for (int i = 1; i <= 10; i++) {
    for (int j = 0; j < i; j++) {
      for (int k = 0; k < 4; k++) {
        Seg[i][j][k].build(n);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int idx = geti(s[i]);
    for (int j = 1; j <= 10; j++) {
      int pos = i % j;
      Seg[j][pos][idx].update(1, 0, n - 1, i, 1);
    }
  }
  int q;
  cin >> q;
  while (q--) {
    int type;
    cin >> type;
    if (type == 1) {
      int pos;
      char c;
      cin >> pos >> c;
      pos--;
      int idx = geti(c);
      int idxant = geti(s[pos]);
      for (int i = 1; i <= 10; i++) {
        int j = pos % i;
        Seg[i][j][idxant].update(1, 0, n - 1, pos, 0);
        Seg[i][j][idx].update(1, 0, n - 1, pos, 1);
      }
      s[pos] = c;
    } else {
      int l, r;
      string e;
      cin >> l >> r >> e;
      l--, r--;
      cout << solve(l, r, e) << "\n";
    }
  }
  return 0;
}
