#include<bits/stdc++.h>
using namespace std;

int main(){
	int n,q;
	string s;
	cin>>n>>s>>q;
	s=" "+s;
	
	vector<set<int>>Si(26);
	// 各アルファベットごとに、出現位置をsetで記録していく。
	for(int pos=1; pos<=n; pos++){
		int alp=s[pos]-'a';
		Si[alp].insert(pos);
	}

	for(int qi=0;qi<q;qi++){
		int type;	cin>>type;

		if(type==1){
			int pos;	char c;
			cin>>pos>>c;

			int alp=s[pos]-'a';
			Si[alp].erase(pos);
			s[pos]=c;		alp=s[pos]-'a';
			Si[alp].insert(pos);
		}else{
			int L,R;	cin>>L>>R;

			int ans=0;	// L-R 範囲内の、アルファベットの種類数
			for(int alp=0; alp<26; alp++){
				auto it=Si[alp].lower_bound(L);
				// it: L 以降で、アルファベット（alp）が出る最小のポジション

				if(it != Si[alp].end() && *it<=R ){
					// it が Rより左にあるなら、範囲内にアルファベット（alp）が存在するよね！
					ans++;
				}
			}
			cout<<ans<<endl;
		}
	}


	return 0;
}
