#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long f = 1, sum = 0;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
const int MAXN = 155;
int f[MAXN][55][55][55], nxt[MAXN][3];
char s[MAXN];
int main() {
  int n;
  scanf("%d", &n);
  scanf("%s", s + 1);
  nxt[n + 1][0] = nxt[n + 1][1] = nxt[n + 1][2] = n + 1;
  for (int i = n; i >= 1; i--) {
    nxt[i][0] = nxt[i + 1][0];
    nxt[i][1] = nxt[i + 1][1];
    nxt[i][2] = nxt[i + 1][2];
    nxt[i][s[i] - 'a'] = i;
  }
  int ans = 0;
  f[1][0][0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int a = 0; a <= (n + 2) / 3; a++)
      for (int b = 0; b <= (n + 2) / 3; b++)
        for (int c = 0; c <= (n + 2) / 3; c++) {
          if (a + b + c == n && abs(a - b) <= 1 && abs(a - c) <= 1 &&
              abs(b - c) <= 1) {
            ans += f[i][a][b][c], ans %= 51123987;
            continue;
          }
          if (nxt[i][0] <= n)
            (f[nxt[i][0]][a + 1][b][c] += f[i][a][b][c]) %= 51123987;
          if (nxt[i][1] <= n)
            (f[nxt[i][1]][a][b + 1][c] += f[i][a][b][c]) %= 51123987;
          if (nxt[i][2] <= n)
            (f[nxt[i][2]][a][b][c + 1] += f[i][a][b][c]) %= 51123987;
        }
  }
  cout << ans;
  return 0;
}
