#include <bits/stdc++.h>
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
constexpr long long MAX = 5100000;
constexpr long long INF = 1LL << 62;
constexpr int inf = 1000000007;
constexpr long long mod = 998244353LL;
const long double PI = acos(-1);
using namespace std;
struct BIT {
  int N;
  vector<long long> node;
  BIT() {}
  BIT(int M) {
    node = vector<long long>(M + 1, 0);
    N = M;
  }
  long long sum1(int i) {
    long long s = 0;
    while (i > 0) {
      s += node[i];
      i -= i & -i;
    }
    return s;
  }
  long long sum1(int i, int j) {
    long long l = sum1(i - 1);
    long long r = sum1(j);
    return r - l;
  }
  void add1(int i, long long x) {
    while (i <= N) {
      node[i] += x;
      i += i & -i;
    }
  }
  long long sum(int left, int right) {
    if (left >= right) return 0;
    return sum1(left + 1, right);
  }
  void add(int i, long long x) { add1(i + 1, x); }
  int lower_bound(long long x) {
    int ret = 0;
    int k = 1;
    while (2 * k <= N) k <<= 1;
    for (; k > 0; k >>= 1) {
      if (ret + k <= N and node[ret + k] < x) {
        x -= node[ret + k];
        ret += k;
      }
    }
    return ret;
  }
};
int cnv(char c) {
  if (c == 'A') return 0;
  if (c == 'T') return 1;
  if (c == 'G') return 2;
  if (c == 'C') return 3;
}
BIT vvb[4][10][10];
string s;
void solve() {
  int t;
  cin >> t;
  if (t == 1) {
    int x;
    char c;
    cin >> x >> c;
    x--;
    int bf = cnv(s[x]);
    int af = cnv(c);
    s[x] = c;
    for (int j = 1; j <= 10; j++) {
      vvb[bf][j - 1][x % j].add(x / j, -1);
      vvb[af][j - 1][x % j].add(x / j, 1);
    }
  } else {
    int l, r;
    string e;
    cin >> l >> r >> e;
    l--;
    r--;
    long long res = 0;
    while (e.size() > (r - l + 1)) e.pop_back();
    int sz = e.size();
    for (int i = 0; i < e.size(); i++) {
      int idx = (l + i) % sz;
      res += vvb[cnv(e[i])][sz - 1][idx].sum((l - idx + sz - 1) / sz,
                                             (r - idx) / sz + 1);
    }
    cout << res << "\n";
  }
}
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  cin >> s;
  int n = s.size();
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 10; j++)
      for (int k = 0; k <= j; k++) vvb[i][j][k] = BIT(n / (j + 1) + 1);
  for (int i = 0; i < s.size(); i++) {
    for (int j = 1; j <= 10; j++) {
      vvb[cnv(s[i])][j - 1][i % j].add(i / j, 1);
    }
  }
  int kkt;
  cin >> kkt;
  while (kkt--) {
    solve();
  }
  return 0;
}
