#include <bits/stdc++.h>
using namespace std;
int n;
int nex[4][160];
char v[160];
int dp[155][55][55][55];
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> v[i];
  }
  v[0] = '$';
  nex[1][n + 1] = -1;
  nex[2][n + 1] = -1;
  nex[3][n + 1] = -1;
  for (int i = n; i >= 0; --i) {
    nex[1][i] = nex[1][i + 1];
    if (v[i] == 'a') nex[1][i] = i;
    nex[2][i] = nex[2][i + 1];
    if (v[i] == 'b') nex[2][i] = i;
    nex[3][i] = nex[3][i + 1];
    if (v[i] == 'c') nex[3][i] = i;
  }
  int bnd = n / 3 + 2;
  int sol = 0;
  dp[0][0][0][0] = 1;
  for (int i = 0; i <= n; ++i) {
    for (int a = 0; a <= bnd; ++a) {
      for (int b = 0; b <= bnd; ++b) {
        for (int c = 0; c <= bnd; ++c) {
          if ((max({abs(a - b), abs(b - c), abs(c - a)}) <= 1) &&
              a + b + c == n) {
            sol += dp[i][a][b][c];
            sol %= 51123987;
          }
          if (nex[1][i] >= 0) {
            dp[nex[1][i]][a + 1][b][c] += dp[i][a][b][c];
            dp[nex[1][i]][a + 1][b][c] %= 51123987;
          }
          if (nex[2][i] >= 0) {
            dp[nex[2][i]][a][b + 1][c] += dp[i][a][b][c];
            dp[nex[2][i]][a][b + 1][c] %= 51123987;
          }
          if (nex[3][i] >= 0) {
            dp[nex[3][i]][a][b][c + 1] += dp[i][a][b][c];
            dp[nex[3][i]][a][b][c + 1] %= 51123987;
          }
        }
      }
    }
  }
  cout << sol << "\n";
  return 0;
}
