#include <bits/stdc++.h>
using namespace std;
int fre[300005][30], tree[300005];
string line;
void build(int pos, int L, int R) {
  if (L == R) {
    int x = line[L] - 'a';
    fre[pos][x]++;
    return;
  }
  build((pos * 2), L, ((L + R) / 2));
  build((pos * 2 + 1), ((L + R) / 2) + 1, R);
  for (int i = 0; i < 26; i++)
    fre[pos][i] = fre[(pos * 2)][i] + fre[(pos * 2 + 1)][i];
}
void update(int pos, int L, int R, int ind, int u) {
  if (L == R) {
    int x = line[L] - 'a';
    fre[pos][x]--;
    line[L] = 'a' + u;
    fre[pos][u]++;
    return;
  }
  if (ind <= ((L + R) / 2))
    update((pos * 2), L, ((L + R) / 2), ind, u);
  else
    update((pos * 2 + 1), ((L + R) / 2) + 1, R, ind, u);
  for (int i = 0; i < 26; i++)
    fre[pos][i] = fre[(pos * 2)][i] + fre[(pos * 2 + 1)][i];
}
int query(int pos, int L, int R, int l, int r, int x) {
  if (r < L || R < l) return 0;
  if (l <= L && R <= r) {
    return fre[pos][x];
  }
  return query((pos * 2), L, ((L + R) / 2), l, r, x) +
         query((pos * 2 + 1), ((L + R) / 2) + 1, R, l, r, x);
}
int main() {
  cin >> line;
  int i, j, k, s, d, r, m, n;
  char x;
  cin >> n;
  m = line.size();
  build(1, 0, m - 1);
  for (i = 1; i <= n; i++) {
    cin >> s;
    if (s == 1) {
      cin >> d >> x;
      update(1, 0, m - 1, d - 1, x - 'a');
    } else {
      cin >> d >> r;
      k = 0;
      for (j = 0; j < 26; j++) {
        int y = query(1, 0, m - 1, d - 1, r - 1, j);
        if (y) k++;
      }
      cout << k << endl;
    }
  }
  return 0;
}
