#include <bits/stdc++.h>
using namespace std;
const int MAXN = 151, MAXM = 60, moder = 51123987;
int f[MAXN][MAXM][MAXM][MAXM], ans, n, Cry_For_theMoon[MAXN][3], bucket[3];
char s[MAXN];
inline void add(int& a, int& b) { a = (a + b) % moder; }
int main() {
  cin >> n >> (s + 1);
  bucket[0] = bucket[1] = bucket[2] = -1;
  for (long long i = (n); i >= (1); i--) {
    bucket[s[i] - 'a'] = i;
    Cry_For_theMoon[i][0] = bucket[0];
    Cry_For_theMoon[i][1] = bucket[1];
    Cry_For_theMoon[i][2] = bucket[2];
  }
  f[1][0][0][0] = 1;
  for (long long i = (1); i <= (n); i++) {
    for (long long a = (0); a <= (min((long long)n, 55LL)); a++) {
      for (long long b = (0); b <= (min(n - a, 55LL)); b++) {
        for (long long c = (0); c <= (min(n - a - b, 55LL)); c++) {
          if (a + b + c == n && abs(a - b) <= 1 && abs(a - c) <= 1 &&
              abs(b - c) <= 1) {
            add(ans, f[i][a][b][c]);
            continue;
          }
          if (Cry_For_theMoon[i][0] != -1)
            add(f[Cry_For_theMoon[i][0]][a + 1][b][c], f[i][a][b][c]);
          if (Cry_For_theMoon[i][1] != -1)
            add(f[Cry_For_theMoon[i][1]][a][b + 1][c], f[i][a][b][c]);
          if (Cry_For_theMoon[i][2] != -1)
            add(f[Cry_For_theMoon[i][2]][a][b][c + 1], f[i][a][b][c]);
        }
      }
    }
  }
  cout << ans;
  return 0;
}
