#!/bin/python import sys, copy def AddLetter(st, freq, prefix, results): #Add mirrored char for i, cand in enumerate(freq): remain = len(freq[cand]) if remain < 2: continue for j in freq[cand]: if j in prefix: continue #print "add", j, cand, freq prefix2 = copy.deepcopy(prefix) freq2 = copy.deepcopy(freq) prefix2.append(j) freq2[cand].remove(j) inds = list(freq2[cand]) freq2[cand].remove(inds[0])#Remove second char AddLetter(st, freq2, prefix2, results) #Add middle char for i, cand in enumerate(freq): remain = len(freq[cand]) if remain < 1: continue for j in freq[cand]: if j in prefix: continue resStr = "".join([st[p] for p in prefix]) #print "middle", prefix, j, resStr+st[j]+resStr[::-1] results.add(tuple(set((prefix + [j] + prefix[::-1])))) #AddLetter(freq, prefix, prefixFreq, results) #No middle char if len(prefix) > 0: resStr = "".join([st[p] for p in prefix]) #print "nomid", resStr + resStr[::-1] results.add(tuple(set((prefix + prefix[::-1])))) def chk(st): freq = {} for i, ch in enumerate(st): if ch not in freq: freq[ch] = set() freq[ch].add(i) #print "st", st, freq prefix = [] results = set() AddLetter(st, freq, prefix, results) print len(results) n,q = raw_input().strip().split(' ') n,q = [int(n),int(q)] s = raw_input().strip() for a0 in xrange(q): # your code goes here qu = map(int, raw_input().strip().split(" ")) if qu[0] == 1: i, j, t = qu[1:] substr = s[i:j+1] substr2 = [ch + 1 for ch in map(ord, substr)] substr3 = "".join(map(chr, substr2)) s = substr3 #Update string else: i, j = qu[1:] substr = s[i:j+1] chk(substr)