func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long read() {     long long f = 1, sum = 0;     char c = getchar();     while (!isdigit(c)) {       if (c ==  - ) f = -1;       c = getchar();     }     while (isdigit(c)) {       sum = sum * 10 + c -  0 ;       c = getchar();     }     return sum * f;   }   const int MAXN = 155;   int f[MAXN][55][55][55], nxt[MAXN][3];   char s[MAXN];   int main() {     int n;     scanf( %d , &n);     scanf( %s , s + 1);     nxt[n + 1][0] = nxt[n + 1][1] = nxt[n + 1][2] = n + 1;     for (int i = n; i >= 1; i--) {       nxt[i][0] = nxt[i + 1][0];       nxt[i][1] = nxt[i + 1][1];       nxt[i][2] = nxt[i + 1][2];       nxt[i][s[i] -  a ] = i;     }     int ans = 0;     f[1][0][0][0] = 1;     for (int i = 1; i <= n; i++) {       for (int a = 0; a <= (n + 2) / 3; a++)         for (int b = 0; b <= (n + 2) / 3; b++)           for (int c = 0; c <= (n + 2) / 3; c++) {             if (a + b + c == n && abs(a - b) <= 1 && abs(a - c) <= 1 &&                 abs(b - c) <= 1) {               ans += f[i][a][b][c], ans %= 51123987;               continue;             }             if (nxt[i][0] <= n)               (f[nxt[i][0]][a + 1][b][c] += f[i][a][b][c]) %= 51123987;             if (nxt[i][1] <= n)               (f[nxt[i][1]][a][b + 1][c] += f[i][a][b][c]) %= 51123987;             if (nxt[i][2] <= n)               (f[nxt[i][2]][a][b][c + 1] += f[i][a][b][c]) %= 51123987;           }     }     cout << ans;     return 0;   }   