#include <bits/stdc++.h>
using namespace std;
#define ll long long int
const int M = 1e9 + 7;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
string s;
cin >> s;
int q;
cin >> q;
map<int, set<int>> mp;
for (int i = 0; i < n; i++)
{
int ch = s[i] - 'a' + 1;
mp[ch].insert(i + 1);
}
vector<int> ans;
while (q--)
{
int type;
cin >> type;
if (type == 1)
{
int i, x;
cin >> i >> x;
int ch = s[i-1] - 'a' + 1;
mp[ch].erase(i);
mp[x].insert(i);
s[i-1] = char(x+96);
}
else
{
int l, r;
cin >> l >> r;
int cnt = 0;
for (auto it : mp)
{
set<int> st = it.second;
auto lt = st.lower_bound(l);
if (lt == st.end() || (*lt>r))
continue;
cnt++;
}
ans.push_back(cnt);
}
}
for (auto it : ans)
cout << it << " ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludApjb25zdCBpbnQgTSA9IDFlOSArIDc7CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGludCBuOwogICAgY2luID4+IG47CiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBzOwogICAgaW50IHE7CiAgICBjaW4gPj4gcTsKICAgIG1hcDxpbnQsIHNldDxpbnQ+PiBtcDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBpbnQgY2ggPSBzW2ldIC0gJ2EnICsgMTsKICAgICAgICBtcFtjaF0uaW5zZXJ0KGkgKyAxKTsKICAgIH0KICAgIHZlY3RvcjxpbnQ+IGFuczsKICAgIHdoaWxlIChxLS0pCiAgICB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgY2luID4+IHR5cGU7CiAgICAgICAgaWYgKHR5cGUgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBpLCB4OwogICAgICAgICAgICBjaW4gPj4gaSA+PiB4OwogICAgICAgICAgICBpbnQgY2ggPSBzW2ktMV0gLSAnYScgKyAxOwogICAgICAgICAgICBtcFtjaF0uZXJhc2UoaSk7CiAgICAgICAgICAgIG1wW3hdLmluc2VydChpKTsKICAgICAgICAgICAgc1tpLTFdID0gY2hhcih4Kzk2KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW50IGwsIHI7CiAgICAgICAgICAgIGNpbiA+PiBsID4+IHI7CiAgICAgICAgICAgIGludCBjbnQgPSAwOwogICAgICAgICAgICBmb3IgKGF1dG8gaXQgOiBtcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2V0PGludD4gc3QgPSBpdC5zZWNvbmQ7CiAgICAgICAgICAgICAgICBhdXRvIGx0ID0gc3QubG93ZXJfYm91bmQobCk7CiAgICAgICAgICAgICAgICBpZiAobHQgPT0gc3QuZW5kKCkgfHwgKCpsdD5yKSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbnMucHVzaF9iYWNrKGNudCk7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoYXV0byBpdCA6IGFucykKICAgICAgICBjb3V0IDw8IGl0IDw8ICIgIjsKICAgIHJldHVybiAwOwp9