#include <bits/stdc++.h>
using namespace std;
const int MAX = 5e3 + 5;
const int MOD = 1e9 + 7;
int n;
char str[MAX];
int prv[MAX][26];
int binom[MAX][MAX], dp[MAX][MAX];
inline int add(int a, int b) {
  a += b;
  if (a >= MOD) {
    a -= MOD;
  } else if (0 > MOD) {
    a += MOD;
  }
  return a;
}
inline int mult(int a, int b) { return (1LL * a * b) % MOD; }
int main() {
  scanf("%d%*c", &n);
  for (int i = int(1); i < int(n + 1); i++) {
    scanf("%c", str + i);
  }
  for (int i = int(0); i < int(n + 1); i++) {
    for (int j = int(0); j < int(i + 1); j++) {
      if (i == j || j == 0) {
        binom[i][j] = 1;
      } else {
        binom[i][j] = add(binom[i - 1][j], binom[i - 1][j - 1]);
      }
    }
  }
  int last[26];
  memset(last, -1, sizeof last);
  memset(prv, -1, sizeof prv);
  for (int i = int(1); i < int(n + 1); i++) {
    for (int j = int(0); j < int(26); j++) {
      prv[i][j] = last[j];
    }
    last[str[i] - 'a'] = i;
  }
  int ans = 0;
  for (int i = int(1); i < int(n + 1); i++) {
    for (int j = int(1); j < int(n + 1); j++) {
      int v = str[j] - 'a';
      if (i == 1) {
        dp[i][j] = 1;
        continue;
      }
      for (int k = int(0); k < int(26); k++) {
        if (k != v && prv[j][k] != -1) {
          dp[i][j] = add(dp[i][j], dp[i - 1][prv[j][k]]);
        }
      }
    }
    for (int j = int(0); j < int(26); j++) {
      if (last[j] != -1) {
        ans = add(ans, mult(binom[n - 1][i - 1], dp[i][last[j]]));
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
