#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
char str[maxn], op[3];
int n, l, r, x, fi[30], permt[30], tmp_permt[30];
struct SegmentTree {
  int l, r, a[30];
} t[maxn * 4];
inline void build(int s, int l, int r) {
  t[s].l = l, t[s].r = r;
  for (int i = 0; i <= 26; i++) t[s].a[i] = 0;
  if (l == r) return;
  int mid = (l + r) / 2;
  build(s * 2, l, mid);
  build(s * 2 + 1, mid + 1, r);
}
inline void insert(int s, int l, int r, int x) {
  if (l <= t[s].l && r >= t[s].r) {
    t[s].a[x]++;
    return;
  }
  int mid = t[s].l + t[s].r >> 1;
  if (l <= mid)
    insert(s * 2, l, r, x);
  else
    insert(s * 2 + 1, l, r, x);
  t[s].a[x] = t[s * 2].a[x] + t[s * 2 + 1].a[x];
}
inline void change(int s, int l, int r, int y, int x) {
  if (l <= t[s].l && r >= t[s].r) {
    t[s].a[x]++;
    t[s].a[y]--;
    return;
  }
  int mid = (t[s].l + t[s].r) >> 1;
  if (l <= mid) {
    change(s * 2, l, r, y, x);
    t[s].a[x] = t[s * 2].a[x] + t[s * 2 + 1].a[x];
    t[s].a[y] = t[s * 2].a[y] + t[s * 2 + 1].a[y];
  } else {
    change(s * 2 + 1, l, r, y, x);
    t[s].a[x] = t[s * 2].a[x] + t[s * 2 + 1].a[x];
    t[s].a[y] = t[s * 2].a[y] + t[s * 2 + 1].a[y];
  }
}
inline void query(int s, int l, int r) {
  if (l <= t[s].l && r >= t[s].r) {
    for (int i = 0; i <= 26; i++) permt[i] += t[s].a[i];
    return;
  }
  int mid = (t[s].l + t[s].r) / 2;
  if (l <= mid) query(s * 2, l, r);
  if (mid < r) query(s * 2 + 1, l, r);
}
inline void out(void) {
  for (int i = 0; i <= 26; i++) permt[i] = 0;
  query(1, 1, 15);
  for (int i = 0; i <= 26; i++) printf("%d%c  ", permt[i], i + 'a');
  puts("");
  for (int i = 0; i <= 26; i++) permt[i] = 0;
}
int main(void) {
  scanf("%s", str + 1);
  scanf("%d", &n);
  build(1, 1, strlen(str + 1));
  for (int i = 1; i <= strlen(str + 1); i++) insert(1, i, i, str[i] - 'a');
  for (int i = 1; i <= n; i++) {
    scanf("%s", op);
    if (op[0] == '1') {
      scanf("%d%s", &x, op);
      change(1, x, x, str[x] - 'a', op[0] - 'a');
      str[x] = op[0];
    } else {
      memset(permt, 0, sizeof permt);
      scanf("%d%d", &l, &r);
      int sum = 0;
      query(1, 1, r);
      memcpy(tmp_permt, permt, sizeof permt);
      memset(permt, 0, sizeof permt);
      query(1, 1, l - 1);
      for (int i = 0; i <= 26; i++) {
        tmp_permt[i] -= permt[i];
        if (tmp_permt[i] > 0) sum++;
      }
      printf("%d\n", sum);
    }
  }
  return 0;
}
