#include using namespace std; long long d[1001][1001]; string s; long long MOD = 1000000007; long long get (int l, int r) { if (l == r) { d[l][r] = 1; return 1; } if (!d[l + 1][r]) { d[l + 1][r] = get (l + 1, r); } if (!d[l][r - 1]) { d[l][r - 1] = get (l, r - 1); } if (!d[l + 1][r - 1] && l + 1 <= r - 1) { d[l + 1][r - 1] = get (l + 1, r - 1); } d[l][r] = (((d[l + 1][r] + d[l][r - 1]) % MOD - d[l + 1][r - 1] ) + MOD) % MOD; if (s[l] == s[r]) { d[l][r] = (d[l][r] + d[l + 1][r - 1] + 1) % MOD; } return d[l][r]; } int main () { ios_base :: sync_with_stdio (0); cin.tie (0); int nn, q; cin >> nn >> q; string ss; cin >> ss; while (q --) { int t, l, r; cin >> t >> l >> r; if (t == 2) { memset (d, 0, sizeof d); long long ans = get (l, r); cout << ans % MOD << endl; } } return 0; }