func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 51123987;   string s;   int n;   long long d[50 + 10][50 + 10][150 + 10][3];   int NEXT[150 + 10][5];   inline int nex(int MIN, int c) { return NEXT[MIN][c]; }   int main() {     ios_base::sync_with_stdio(false);     cin >> n >> s;     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= 3; ++j) {         NEXT[i][j] = n + 1;         for (int l = i - 1; l < s.size(); ++l)           if (s[l] == char(j +  a  - 1)) {             NEXT[i][j] = l + 1;             break;           }       }     {       int ind = nex(1, 1);       if (ind <= n) d[1][0][ind][1] = 1;       ind = nex(1, 2);       if (ind <= n) d[0][1][ind][1] = 1;       ind = nex(1, 3);       if (ind <= n) d[0][0][ind][1] = 1;     }     for (int i = 2; i <= n; ++i) {       for (int j = 0; j <= 50; ++j)         for (int l = 0; l <= 50; ++l)           for (int k = 1; k <= n; ++k) {             int ind = nex(k, 1);             if (ind <= n) {               d[j + 1][l][ind][0] += d[j][l][k][1];               if (d[j + 1][l][ind][0] > mod) d[j + 1][l][ind][0] -= mod;             }             ind = nex(k, 2);             if (ind <= n) {               d[j][l + 1][ind][0] += d[j][l][k][1];               if (d[j][l + 1][ind][0] > mod) d[j][l + 1][ind][0] -= mod;             }             ind = nex(k, 3);             if (ind <= n) {               d[j][l][ind][0] += d[j][l][k][1];               if (d[j][l][ind][0] > mod) d[j][l][ind][0] -= mod;             }           }       for (int j = 0; j <= 50; ++j)         for (int l = 0; l <= 50; ++l)           for (int k = 1; k <= n; ++k) {             d[j][l][k][1] = d[j][l][k][0];             d[j][l][k][0] = 0;           }     }     long long ans = 0;     for (int j = 0; j <= 50; ++j)       for (int l = 0; l <= 50; ++l)         for (int k = 1; k <= n; ++k) {           int a = j;           int b = l;           int c = n - j - l;           if (a >= 0 && b >= 0 && c >= 0)             if (abs(a - b) <= 1 && abs(b - c) <= 1 && abs(a - c) <= 1) {               ans += d[j][l][k][1];               ans %= mod;             }         }     cout << ans << endl;     return 0;   }   