#include <bits/stdc++.h>
using namespace std;
int n, ways[5050][5050], last[27], fat[5050], ifat[5050];
char s[5050];
int expo(int b, int e) {
  if (!e) return 1;
  if (e & 1)
    return 1LL * b * expo(1LL * b * b % 1000000007, e >> 1) % 1000000007;
  return expo(1LL * b * b % 1000000007, e >> 1);
}
int invmod(int x) { return expo(x, 1000000007 - 2); }
void prep() {
  fat[0] = 1;
  for (int i = 1; i < 5050; i++) fat[i] = 1LL * fat[i - 1] * i % 1000000007;
  ifat[5050 - 1] = invmod(fat[5050 - 1]);
  for (int i = 5050 - 1; i > 0; i--)
    ifat[i - 1] = 1LL * ifat[i] * i % 1000000007;
  assert(ifat[0] == 1);
}
long long nCr(int n, int k) {
  return 1LL * fat[n] * ifat[k] % 1000000007 * ifat[n - k] % 1000000007;
}
int main() {
  scanf("%d %s", &n, s + 1);
  prep();
  s[0] = char('a' + 26);
  last[26] = n + 1;
  ways[n + 1][0] = 1;
  for (int i = n; i >= 0; i--) {
    for (int c = 0; c < 27; c++) {
      if (c == (s[i] - 'a') || (last[c] == 0)) continue;
      for (int j = 0; j < (n - i + 1); j++) {
        ways[i][j + 1] += ways[last[c]][j];
        if (ways[i][j + 1] >= 1000000007) ways[i][j + 1] -= 1000000007;
      }
    }
    last[s[i] - 'a'] = i;
  }
  long long ans = 0;
  for (int i = 2; i <= n + 1; i++) {
    ans = (ans + nCr(n - 1, i - 2) * ways[0][i]) % 1000000007;
  }
  printf("%lld\n", ans);
  return 0;
}
