#include using namespace std; #define gc getchar_unlocked #define fo(i,n) for(i=0;in;k pii; typedef pair pl; typedef vector vi; typedef vector vl; typedef vector vpii; typedef vector vpl; typedef vector vvi; typedef vector vvl; const int mod = 1000000007; const int N = 2e5; vi g[N]; int a[N]; int mpow(int base, int exp); void ipgraph(int n, int m); void dfs(int u, int par); ll p[N]; ll dp[30][N]; string s; int n; void work(){ int i, j; clr(dp); Fo(i, 0, 26) Fo(j, 1, n+1) dp[i][j] = dp[i][j-1] + (s[j-1]==('a'+i)); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int i,k,j,t,q,l,r; cin>>n>>q; cin>>s; work(); while(q--){ cin>>t>>l>>r; r++; if(t==1){ cin>>k; if(n>500) continue; k %= 26; Fo(i, l, r){ int cr = s[i]-'a'; cr += k; cr %= 26; s[i] = cr+'a'; } work(); } if(t==2){ ll ans = 1; fo(i, 26){ ll cnt = dp[i][r]-dp[i][l]; // cout<= mod) ans -= mod; } cout< 0) { if (exp & 1) result = ((ll)result * base) % mod; base = ((ll)base * base) % mod; exp >>= 1; } return result; } void ipgraph(int n, int m){ int i, u, v; while(m--){ cin>>u>>v; g[u-1].pb(v-1); g[v-1].pb(u-1); } } void dfs(int u, int par){ for(int v:g[u]){ if (v == par) continue; dfs(v, u); } }