func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, k;   string s;   int f[2222][2222][2];   const int mod = 1000000007;   int sum[2222][2222];   inline void add(int i, int j, int k, int val) {     f[i][j][k] += val;     if (f[i][j][k] >= mod) f[i][j][k] -= mod;   }   int solve() {     int ans = 0;     for (int pos = 0; pos < n; ++pos) {       int ls = s[pos] -  a ;       int mr = 25 - ls;       for (int cnt = 0; cnt <= k; ++cnt) {         add(pos, cnt, 0, ((long long)ls * (sum[cnt][pos - 1])) % mod);         if (!cnt) {           add(pos, cnt, 0, ls);         }         for (int prev = pos - 1; prev >= 0; --prev) {           int to_add = (pos - prev) * (n - pos);           if (to_add > cnt) break;           add(pos, cnt, 1, ((long long)mr * f[prev][cnt - to_add][0]) % mod);           add(pos, cnt, 1, ((long long)mr * f[prev][cnt - to_add][1]) % mod);         }         int to_add = (pos + 1) * (n - pos);         if (to_add == cnt) {           add(pos, cnt, 1, mr);         }         sum[cnt][pos] += f[pos][cnt][0];         if (sum[cnt][pos] >= mod) sum[cnt][pos] -= mod;         sum[cnt][pos] += f[pos][cnt][1];         if (sum[cnt][pos] >= mod) sum[cnt][pos] -= mod;         sum[cnt][pos] += sum[cnt][pos - 1];         if (sum[cnt][pos] >= mod) sum[cnt][pos] -= mod;       }       ans += f[pos][k][0];       if (ans >= mod) ans -= mod;       ans += f[pos][k][1];       if (ans >= mod) ans -= mod;     }     if (k == 0) {       ++ans;       if (ans == mod) ans = 0;     }     return ans;   }   int main() {     cin >> n >> k;     cin >> s;     cout << solve() << endl;   }   