#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
long long mode(long long a) {
  while (a < 0) {
    a += mod;
  }
  return a % mod;
}
long long subt(long long a, long long b) { return mode(mode(a) - mode(b)); }
long long add(long long a, long long b) { return mode(mode(a) + mode(b)); }
long long mult(long long a, long long b) { return mode(mode(a) * mode(b)); }
long long binpow(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = mult(res, a);
    a = mult(a, a);
    b >>= 1;
  }
  return res;
}
const int N = 2e6 + 7;
long long dp[N];
int last[26];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, k, m;
  string s;
  cin >> n >> k >> s;
  m = int((s).size());
  dp[0] = 1;
  for (int i = 0; i < int((s).size()); i++) {
    auto ans = subt(dp[i], dp[last[int(s[i] - 'a')] - 1]);
    dp[i + 1] = add(ans, dp[i]);
    last[int(s[i] - 'a')] = i + 1;
  }
  for (int i = 1; i <= n; i++) {
    int furthest = n + m + 1, ind = 0;
    for (int j = 0; j < k; j++) {
      if (last[j] < furthest) {
        furthest = last[j];
        ind = j;
      }
    }
    auto ans = subt(dp[i + m - 1], dp[last[ind] - 1]);
    dp[i + m] = add(ans, dp[i + m - 1]);
    last[ind] = i + m;
  }
  cout << dp[n + m];
  return 0;
}
