#!/bin/python import sys import itertools def shiftString(s, params): start = params[0] end = params[1] delta = params[2] partial = map(lambda x: chr( ((ord(x)-97 + delta) % 26) + 97 ), s[start:end+1]) s = ''.join(partial) + s[end+1:] return s def isPalindrome(s): return str(s) == str(s)[::-1] def countPalindromes(s, params): start = params[0] end = params[1] s = s[start:end+1] count = 0 for l in range(0, len(s)+1): for subset in itertools.combinations(s, l): sPrime = ''.join(subset) if len(sPrime) != 0 and isPalindrome(sPrime): count += 1 return count #countPalindromes('aba',[0,2]) n,q = raw_input().strip().split(' ') n,q = [int(n),int(q)] s = raw_input().strip() for a0 in xrange(q): params = map(int, raw_input().strip().split(' ')) op = params.pop(0) if op == 1: s = shiftString(s, params) elif op == 2: print countPalindromes(s, params)