#include #define F first #define S second #define mp make_pair #define pb push_back #define sz(x) x.size() #define all(x) x.begin(), x.end() #define pii pair < int , int > using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int N = 1e6 + 123; const int mod = 1e9 + 7; const int INF = 1e9 + 1; const ll INFL = 3e18 + 1; const double pi = acos(-1.0); int n, q; string s; ll dp[5000][5000]; ll calc (int l, int r){ if (l > r)return 0ll; if (l == r)return 1ll; if (dp[l + 1][r] == 0)dp[l + 1][r] = calc (l + 1, r) % mod; if (dp[l][r - 1] == 0)dp[l][r - 1] = calc (l, r - 1) % mod; if (dp[l + 1][r - 1] == 0)dp[l + 1][r - 1] = calc (l + 1, r - 1) % mod; dp[l][r] = (((dp[l + 1][r] + dp[l][r - 1]) % mod - dp[l + 1][r - 1]) + mod) % mod; if (s[l] == s[r])dp[l][r] += (dp[l + 1][r - 1] + 1) % mod; return dp[l][r] % mod; } int main () { ios_base::sync_with_stdio (0); cin.tie (0); cin >> n >> q >> s; while (q --) { int tp, l, r, t; cin >> tp; if (tp == 1) { cin >> l >> r >> t; for (int i = l;i <= r;i ++) s[i] = (s[i] + t - 26); memset (dp, 0, sizeof dp); } else { cin >> l >> r; cout << calc (l, r) % mod << endl; } } return 0; }