d={} def palin(s,n): if (s,n) in d: return d[(s,n)] #print(s,n) if n<0: return 0 if n==0: return 1 l=len(s) if l==0: return 0 k=1 for x in range(n): if s[x]==s[n]: k+=(1+palin(s[x+1:n],n-x-2)) ret=palin(s,n-1)+k d[(s,n)]=ret #print(s,n,ret) return ret [n,q]=[int(x) for x in input().strip().split(' ')] s=list(input().strip()) for x in range(q): qu=[int(y) for y in input().strip().split(' ')] if qu[0]==1: for y in range(qu[1],qu[2]+1): s[y]=chr(((ord(s[y])-ord('a')+qu[3])%26)+ord('a')) else: ss=s[qu[1]:(qu[2]+1)] print(palin(''.join(ss),len(ss)-1))