#include <bits/stdc++.h>
using namespace std;
const long long mod = 51123987;
string s;
int n;
long long d[50 + 10][50 + 10][150 + 10][3];
int NEXT[150 + 10][5];
inline int nex(int MIN, int c) { return NEXT[MIN][c]; }
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> s;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= 3; ++j) {
      NEXT[i][j] = n + 1;
      for (int l = i - 1; l < s.size(); ++l)
        if (s[l] == char(j + 'a' - 1)) {
          NEXT[i][j] = l + 1;
          break;
        }
    }
  {
    int ind = nex(1, 1);
    if (ind <= n) d[1][0][ind][1] = 1;
    ind = nex(1, 2);
    if (ind <= n) d[0][1][ind][1] = 1;
    ind = nex(1, 3);
    if (ind <= n) d[0][0][ind][1] = 1;
  }
  for (int i = 2; i <= n; ++i) {
    for (int j = 0; j <= 50; ++j)
      for (int l = 0; l <= 50; ++l)
        for (int k = 1; k <= n; ++k) {
          int ind = nex(k, 1);
          if (ind <= n) {
            d[j + 1][l][ind][0] += d[j][l][k][1];
            if (d[j + 1][l][ind][0] > mod) d[j + 1][l][ind][0] -= mod;
          }
          ind = nex(k, 2);
          if (ind <= n) {
            d[j][l + 1][ind][0] += d[j][l][k][1];
            if (d[j][l + 1][ind][0] > mod) d[j][l + 1][ind][0] -= mod;
          }
          ind = nex(k, 3);
          if (ind <= n) {
            d[j][l][ind][0] += d[j][l][k][1];
            if (d[j][l][ind][0] > mod) d[j][l][ind][0] -= mod;
          }
        }
    for (int j = 0; j <= 50; ++j)
      for (int l = 0; l <= 50; ++l)
        for (int k = 1; k <= n; ++k) {
          d[j][l][k][1] = d[j][l][k][0];
          d[j][l][k][0] = 0;
        }
  }
  long long ans = 0;
  for (int j = 0; j <= 50; ++j)
    for (int l = 0; l <= 50; ++l)
      for (int k = 1; k <= n; ++k) {
        int a = j;
        int b = l;
        int c = n - j - l;
        if (a >= 0 && b >= 0 && c >= 0)
          if (abs(a - b) <= 1 && abs(b - c) <= 1 && abs(a - c) <= 1) {
            ans += d[j][l][k][1];
            ans %= mod;
          }
      }
  cout << ans << endl;
  return 0;
}
