#include <bits/stdc++.h>
inline int cmp(double x, double y = 0, double tol = 1e-9) {
  return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1;
}
char *seq;
int state, ans, n;
int next[155][3];
int dp[155][52][52][52];
int main() {
  scanf("%d", &n);
  seq = new char[n + 1];
  for (int i = 1; i <= n; ++i) {
    scanf(" %c", &seq[i]);
    seq[i] -= 'a';
  }
  for (int i = n; i >= 1; --i) {
    for (int j = 0; j <= 2; ++j) next[i][j] = next[i + 1][j];
    next[i][seq[i]] = i;
  }
  delete[] seq;
  int m = (n + 2) / 3;
  dp[1][0][0][0] = 1;
  for (int i = 1; i <= n; ++i)
    for (int x = 0; x <= m; ++x)
      for (int y = 0; y <= m; ++y)
        for (int z = 0; z <= m; ++z)
          if (state = dp[i][x][y][z]) {
            if (x + y + z == n && ((x - z) < 0 ? -(x - z) : (x - z)) < 2 &&
                ((x - y) < 0 ? -(x - y) : (x - y)) < 2 &&
                ((y - z) < 0 ? -(y - z) : (y - z)) < 2)
              (ans = (ans + state) % 51123987);
            (dp[next[i][0]][x + 1][y][z] =
                 (dp[next[i][0]][x + 1][y][z] + state) % 51123987);
            (dp[next[i][1]][x][y + 1][z] =
                 (dp[next[i][1]][x][y + 1][z] + state) % 51123987);
            (dp[next[i][2]][x][y][z + 1] =
                 (dp[next[i][2]][x][y][z + 1] + state) % 51123987);
          }
  printf("%d\n", ans);
  return 0;
}
