#include <bits/stdc++.h>
using namespace std;
const int MOD = 51123987;
string s, ans;
int nxt[160][3];
int dp[160][53][53][53];
int main() {
  int n;
  scanf("%d", &n);
  cin >> s;
  ans += s[0];
  for (int i = 1; i < n; i++) {
    if (ans[i] == s[i - 1]) continue;
    ans += s[i];
  }
  int len = (int)ans.size();
  memset(nxt, -1, sizeof(nxt));
  for (int i = 0; i < len; i++) {
    for (int j = i; j < len; j++) {
      if (ans[j] == 'a' && nxt[i][0] == -1) nxt[i][0] = j;
      if (ans[j] == 'b' && nxt[i][1] == -1) nxt[i][1] = j;
      if (ans[j] == 'c' && nxt[i][2] == -1) nxt[i][2] = j;
      if (nxt[i][0] != -1 && nxt[i][1] != -1 && nxt[i][2] != -1) break;
    }
  }
  dp[0][0][0][0] = 1;
  int tmp = n / 3 + 1;
  int ans = 0;
  for (int i = 1; i <= len; i++) {
    for (int a = 0; a <= tmp; a++) {
      for (int b = 0; b <= tmp; b++) {
        for (int c = 0; c <= tmp; c++) {
          if (dp[i - 1][a][b][c] == 0) continue;
          if (a + b + c == n && abs(a - b) <= 1 && abs(a - c) <= 1 &&
              abs(b - c) <= 1) {
            ans += dp[i - 1][a][b][c];
            ans %= MOD;
          }
          int k = nxt[i - 1][0];
          if (k != -1) {
            dp[k][a + 1][b][c] += dp[i - 1][a][b][c];
            dp[k][a + 1][b][c] %= MOD;
          }
          k = nxt[i - 1][1];
          if (k != -1) {
            dp[k][a][b + 1][c] += dp[i - 1][a][b][c];
            dp[k][a][b + 1][c] %= MOD;
          }
          k = nxt[i - 1][2];
          if (k != -1) {
            dp[k][a][b][c + 1] += dp[i - 1][a][b][c];
            dp[k][a][b][c + 1] %= MOD;
          }
        }
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
