import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static int eh(char a){ return (int)a-(int)'a'; } public static char next(char a,int t){ t=t%26; char c,d='z',l='a'; int r=(int)d; if(a<=d-t){ int b=(int)a; c=(char)(b+t); } else{ int b=(int)l+(t-(((int)d)-(int)a))-1; c=(char)b; } return c; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int q = in.nextInt(); String s = in.next(); for(int a0 = 0; a0 < q; a0++){ if(in.nextInt()==2){ int i=in.nextInt(); int j=in.nextInt(); int k=0; int[] ar=new int[26]; while(k<(j-i)+1){ ar[eh(s.charAt(k+i))]++; k++; } int ev=0,od=0,ze=0,r2=0,r1,se=0,so=0; for(int f=0;f<26;f++){ if(ar[f]==0){ se+=ar[f]; ze++; } else if(ar[f]%2==0){ ev++; if(ar[f]=2){ r2++; } } else{ if(ar[f]==1){ r1++; so--; } so+=ar[f]; od++; } } } else{ int i=in.nextInt(); int j=in.nextInt(); int t=in.nextInt(); String g=s.substring(0,i); int k=0; while(k<(j-i)+1){ g+=next(s.charAt(k+i),t); k++; } g+=s.substring(j+1,(n)); s=g; //System.out.println(s); } // your code goes here } //System.out.println(next('z',27)); } }