# -*- coding: utf-8 -*-
import sys

N=input()
S=["None"]+list(raw_input())
Q=input()
query=[ sys.stdin.readline().split() for _ in range(Q) ]

#BIT
bit=[ [ 0 for _ in range(N+1) ] for _ in range(27) ]  #1-indexed bit[1]:aのbit, bit[2]:bのbit ...

def add(idx,a,w):
    while a<=N:
        bit[idx][a]+=w
        a+=a&-a

def sum(idx,a):
    ret=0
    while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
    return ret

for i,x in enumerate(S):
    if i==0: continue
    add(ord(x)-96,i,1)  #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値


for q1,q2,q3 in query:
    q1=int(q1)
    q2=int(q2)
    if q1==1:
        before_q3=S[q2] #文字列Sの変更前の文字をbefore_q3に代入
        S[q2]=q3        #文字列Sの変更部分1文字を更新
        q3=ord(q3)-96                   #変更後の文字をアスキーコード10進数で表現
        before_q3=ord(before_q3)-96     #変更前の文字をアスキーコード10進数で表現
        add(q3,q2,1)                    #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値
        add(before_q3,q2,-1)    #置き代えた文字は-1しなきゃいけない
    elif q1==2:
        q3=int(q3)
        cnt=0
        for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
        print cnt import sys sys N=input() N input() input S=["None"]+list(raw_input()) S ["None"]+list(raw_input()) ["None"] "None" list(raw_input()) list raw_input() raw_input Q=input() Q input() input sys.stdin.readline().split() for _ in range(Q) for _ in range(Q) _ range(Q) range Q for _ in range(Q) sys.stdin.readline().split() sys.stdin.readline().split sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline split query=[ sys.stdin.readline().split() for _ in range(Q) ] query [ sys.stdin.readline().split() for _ in range(Q) ] [ 0 for _ in range(N+1) ] for _ in range(27) for _ in range(27) _ range(27) range 27 for _ in range(27) [ 0 for _ in range(N+1) ] bit=[ [ 0 for _ in range(N+1) ] for _ in range(27) ] bit [ [ 0 for _ in range(N+1) ] for _ in range(27) ] def add(idx,a,w):
    while a<=N:
        bit[idx][a]+=w
        a+=a&-a add while a<=N:
        bit[idx][a]+=w
        a+=a&-a a<=N a N bit[idx][a]+=w bit[idx][a] [idx] bit idx a w a+=a&-a a a&-a a -a a idx idx a a w w def sum(idx,a):
    ret=0
    while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
    return ret sum ret=0 ret 0 while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
     0<a 0 a ret+=bit[idx][a] ret bit[idx][a] [idx] bit idx a a-=a&-a a a&-a a -a a return ret ret idx idx a a for i,x in enumerate(S):
    if i==0: continue
    add(ord(x)-96,i,1)  #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値 i x enumerate(S) enumerate S if i==0: continue
     i==0 i 0 add(ord(x)-96,i,1) add ord(x)-96 ord(x) ord x 96 i 1 for q1,q2,q3 in query:
    q1=int(q1)
    q2=int(q2)
    if q1==1:
        before_q3=S[q2] #文字列Sの変更前の文字をbefore_q3に代入
        S[q2]=q3        #文字列Sの変更部分1文字を更新
        q3=ord(q3)-96                   #変更後の文字をアスキーコード10進数で表現
        before_q3=ord(before_q3)-96     #変更前の文字をアスキーコード10進数で表現
        add(q3,q2,1)                    #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値
        add(before_q3,q2,-1)    #置き代えた文字は-1しなきゃいけない
    elif q1==2:
        q3=int(q3)
        cnt=0
        for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
        print cnt q1 q2 q3 query q1=int(q1) q1 int(q1) int q1 q2=int(q2) q2 int(q2) int q2 if q1==1:
        before_q3=S[q2] #文字列Sの変更前の文字をbefore_q3に代入
        S[q2]=q3        #文字列Sの変更部分1文字を更新
        q3=ord(q3)-96                   #変更後の文字をアスキーコード10進数で表現
        before_q3=ord(before_q3)-96     #変更前の文字をアスキーコード10進数で表現
        add(q3,q2,1)                    #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値
        add(before_q3,q2,-1)    #置き代えた文字は-1しなきゃいけない
    elif q1==2:
        q3=int(q3)
        cnt=0
        for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
        print cnt q1==1 q1 1 before_q3=S[q2] before_q3 S[q2] S q2 S[q2]=q3 S[q2] S q2 q3 q3=ord(q3)-96 q3 ord(q3)-96 ord(q3) ord q3 96 before_q3=ord(before_q3)-96 before_q3 ord(before_q3)-96 ord(before_q3) ord before_q3 96 add(q3,q2,1) add q3 q2 1 add(before_q3,q2,-1) add before_q3 q2 -1 elif q1==2:
        q3=int(q3)
        cnt=0
        for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
        print cnt q1==2 q1 2 q3=int(q3) q3 int(q3) int q3 cnt=0 cnt 0 for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
         i range(1,27) range 1 27 if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
         0<sum(i,q3)-sum(i,q2-1) 0 sum(i,q3)-sum(i,q2-1) sum(i,q3) sum i q3 sum(i,q2-1) sum i q2-1 q2 1 cnt+=1 cnt 1 print def add(idx,a,w):
    while a<=N:
        bit[idx][a]+=w
        a+=a&-a def add(idx,a,w):
    while a<=N:
        bit[idx][a]+=w
        a+=a&-a add before_q3=ord(before_q3)-96 ord(before_q3)-96 before_q3 Q=input() input() Q cnt=0 0 cnt before_q3=S[q2] S[q2] before_q3 S=["None"]+list(raw_input()) ["None"]+list(raw_input()) S query=[ sys.stdin.readline().split() for _ in range(Q) ] [ sys.stdin.readline().split() for _ in range(Q) ] query bit=[ [ 0 for _ in range(N+1) ] for _ in range(27) ] [ [ 0 for _ in range(N+1) ] for _ in range(27) ] bit def sum(idx,a):
    ret=0
    while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
    return ret def sum(idx,a):
    ret=0
    while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
    return ret sum q3=ord(q3)-96 ord(q3)-96 q3 cnt+=1 1 cnt q1=int(q1) int(q1) q1 q2=int(q2) int(q2) q2 N=input() input() N q3=int(q3) int(q3) q3
# -*- coding: utf-8 -*-
import sys

N=input()
S=["None"]+list(raw_input())
Q=input()
query=[ sys.stdin.readline().split() for _ in range(Q) ]

#BIT
bit=[ [ 0 for _ in range(N+1) ] for _ in range(27) ]  #1-indexed bit[1]:aのbit, bit[2]:bのbit ...

def add(idx,a,w):
    while a<=N:
        bit[idx][a]+=w
        a+=a&-a

def sum(idx,a):
    ret=0
    while 0<a:
        ret+=bit[idx][a]
        a-=a&-a
    return ret

for i,x in enumerate(S):
    if i==0: continue
    add(ord(x)-96,i,1)  #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値


for q1,q2,q3 in query:
    q1=int(q1)
    q2=int(q2)
    if q1==1:
        before_q3=S[q2] #文字列Sの変更前の文字をbefore_q3に代入
        S[q2]=q3        #文字列Sの変更部分1文字を更新
        q3=ord(q3)-96                   #変更後の文字をアスキーコード10進数で表現
        before_q3=ord(before_q3)-96     #変更前の文字をアスキーコード10進数で表現
        add(q3,q2,1)                    #a~zのどのbit配列か,特定文字のbit配列の何番目,bitに代入する値
        add(before_q3,q2,-1)    #置き代えた文字は-1しなきゃいけない
    elif q1==2:
        q3=int(q3)
        cnt=0
        for i in range(1,27):
            if 0<sum(i,q3)-sum(i,q2-1):
                cnt+=1
        print cnt