#include <bits/stdc++.h>
using namespace std;
int N, M, f[155][55][55][55], nx[155][3];
char s[155], x[155];
void init() {
  memset(f, 0, sizeof f), memset(nx, 0, sizeof nx), x[0] = '*';
  M = 0;
  for (int i = int(1), ni = int(N); i <= ni; i++)
    if (s[i] != x[M]) x[++M] = s[i];
  x[M + 1] = '\0';
  for (int i = int(M), ni = int(1); i >= ni; i--) {
    nx[i][0] = nx[i + 1][0];
    nx[i][1] = nx[i + 1][1];
    nx[i][2] = nx[i + 1][2];
    nx[i][x[i] - 'a'] = i;
  }
}
int main(void) {
  while (~scanf("%d %s", &N, s + 1)) {
    init();
    int lim = (N + 2) / 3, j, tt;
    f[1][0][0][0] = 1;
    int ans = 0;
    for (int i = int(1), ni = int(M); i <= ni; i++) {
      for (int kA = int(0), nkA = int(lim); kA <= nkA; kA++)
        for (int kB = int(0), nkB = int(lim); kB <= nkB; kB++)
          for (int kC = int(0), nkC = int(lim); kC <= nkC; kC++) {
            tt = f[i][kA][kB][kC];
            (f[nx[i][0]][kA + 1][kB][kC] += tt) %= 51123987;
            (f[nx[i][1]][kA][kB + 1][kC] += tt) %= 51123987;
            (f[nx[i][2]][kA][kB][kC + 1] += tt) %= 51123987;
            if ((kA + kB + kC == N) && abs(kA - kB) < 2 && abs(kA - kC) < 2 &&
                abs(kC - kA) < 2)
              (ans += tt) %= 51123987;
          }
    }
    cout << ans << endl;
  }
  return 0;
}
