import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static void main(String[] args) {import java.util.*; import java.io.*; class FastReader { BufferedReader br; StringTokenizer st; public FastReader() { br = new BufferedReader(new InputStreamReader(System.in)); } String next() { while (st == null || !st.hasMoreElements()) { try { st = new StringTokenizer(br.readLine()); } catch (IOException e) { e.printStackTrace(); } } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } long nextLong() { return Long.parseLong(next()); } double nextDouble() { return Double.parseDouble(next()); } String nextLine() { String str = ""; try { str = br.readLine(); } catch (IOException e) { e.printStackTrace(); } return str; } } class Solution { FastReader sc; public Solution() { sc=new FastReader(); int n=sc.nextInt(); int q=sc.nextInt(); String str=sc.next(); char arr[]=str.toCharArray(); int typ=sc.next(); if(typ==2) { int l=sc.nextInt(); int r=sc.nextInt(); char temp[]=new char[r-l+1]; k=0; for(int i=l;i<=r;i++) { temp[k]=arr[i]; k++; } System.out.println(solve(temp)); } else if(typ==1) { int l=sc.nextInt(); int r=sc.nextInt(); int t=sc.nextInt(); for(int i=l;i<=r;i++) { int x=arr[i]; t=t%26; if(x+t<=122) { x=x+t; arr[i]=(char)x; } else if(x+t>122) { int as=122-x; int ad=t-as; x=97+ad; arr[i]=(char)x; } } } } public int solve(char arr[]) { int len=arr.length; int m[][]=new int[len][len]; for(int l=2;l<=len;l++) { for(int i=0;i