#include <bits/stdc++.h>
using namespace std;
const int MOD = 51123987;
int N, M, Next[160][3], Last[3];
int F[2][160][60][60];
char S[200];
inline bool Contain(int s, int k) { return (s >> k) & 1; }
inline void Plus(int &s, int x) {
  s += x;
  if (s >= MOD) {
    s -= MOD;
  }
}
int main(int argc, char *argv[]) {
  scanf("%d", &N);
  scanf("%s", S + 1);
  memset(Last, 2, sizeof(Last));
  for (int i = N; i >= 1; i--) {
    Last[S[i] - 'a'] = i;
    memcpy(Next[i], Last, sizeof(Last));
  }
  memcpy(Next[0], Last, sizeof(Last));
  F[0][0][0][0] = 1;
  int U = 1, V = 0;
  M = N / 3 + 1;
  for (int i = 1; i <= N; i++) {
    U ^= 1;
    V ^= 1;
    memset(F[V], 0, sizeof(F[V]));
    for (int j = 0; j <= N; j++) {
      for (int a = 0; a <= M; a++) {
        for (int b = 0; b <= M; b++)
          if (F[U][j][a][b]) {
            int opt = F[U][j][a][b];
            if (Next[j][0] <= N) {
              Plus(F[V][Next[j][0]][a + 1][b], opt);
            }
            if (Next[j][1] <= N) {
              Plus(F[V][Next[j][1]][a][b + 1], opt);
            }
            if (Next[j][2] <= N) {
              Plus(F[V][Next[j][2]][a][b], opt);
            }
          }
      }
    }
  }
  int Ret = 0;
  for (int i = 0; i <= N; i++) {
    for (int a = 0; a <= M; a++) {
      for (int b = 0; b <= M; b++)
        if (abs(a - b) <= 1) {
          int c = N - a - b;
          if (c >= 0 && abs(a - c) <= 1 && abs(b - c) <= 1) {
            Plus(Ret, F[V][i][a][b]);
          }
        }
    }
  }
  printf("%d\n", Ret);
  return 0;
}
