15
txxtxttxxttxtxx
 3
myw
 127
xixtxixnxixtxixlxixtxixnxixtxixoxixtxixnxixtxixlxixtxixnxixtxixhxixtxixnxixtxixlxixtxixnxixtxixoxixtxixnxixtxixlxixtxixnxixtxix
 1
a
 10
isssisssss
 2
ff
 1
z

27824
 10
 944124121
 1
 176
 1
 1

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 5050;
const int MOD = 1e9 + 7;
int C[MAXN][MAXN];
int dp[2][5001][27], n;
int f[2][MAXN];
char str[MAXN];
void upd(int &x, int y) {
  x += y;
  if (x >= MOD)
    x -= MOD;
  else if (x < 0)
    x += MOD;
}
int main() {
  for (int i = (0); i < (MAXN); i++) {
    C[i][0] = 1;
    for (int j = (1); j < (i + 1); j++) {
      C[i][j] = C[i - 1][j];
      upd(C[i][j], C[i - 1][j - 1]);
    }
  }
  cin >> n;
  cin >> str + 1;
  f[0][0] = 1;
  int p = 0, q = 1;
  int now = 0, nxt = 1;
  for (int i = (1); i < (n + 1); i++) {
    f[now][0] = 1;
    for (int j = (1); j < (i + 1); j++) {
      for (int k = (0); k < (26); k++) {
        if (k + 'a' == str[i])
          dp[p][j][k] = f[now][j - 1], upd(dp[p][j][k], -dp[q][j - 1][k]);
        else
          dp[p][j][k] = dp[q][j][k];
        upd(f[nxt][j], dp[p][j][k]);
      }
    }
    swap(p, q);
    swap(nxt, now);
    memset(f[nxt], 0, sizeof(int) * n);
  }
  int ans = 0;
  for (int i = (1); i < (n + 1); i++) {
    upd(ans, (long long)C[n - 1][i - 1] * f[now][i] % MOD);
  }
  cout << ans << endl;
}
