#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
struct Sync_stdio {
  Sync_stdio() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);
  }
} _sync_stdio;
int main() {
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;
  int m = s.size();
  vector<int> used(k);
  for (int i = (0); i < (s.size()); ++i) {
    used[s[i] - 'a'] = 1;
  }
  for (int i = (0); i < (used.size()); ++i) {
    if (used[i]) {
      continue;
    }
    if (s.size() < n + m) {
      s.push_back('a' + i);
    }
  }
  used.assign(k, 0);
  string order;
  for (int i = (int(s.size()) - 1); i > (-1); --i) {
    if (!used[s[i] - 'a']) {
      order.push_back(s[i]);
    }
    used[s[i] - 'a'] = 1;
  }
  reverse(order.begin(), order.end());
  int idx = 0;
  while (s.size() < n + m) {
    s.push_back(order[idx]);
    ++idx;
    idx %= k;
  }
  long long ans = 0;
  used.assign(n, 0);
  vector<vector<int>> dp(2, vector<int>(k + 1));
  ++dp[0][k];
  for (int i = (0); i < (n + m); ++i) {
    for (int j = (0); j < (k + 1); ++j) {
      dp[!(i & 1)][j] = 0;
    }
    for (int j = (0); j < (k + 1); ++j) {
      dp[!(i & 1)][j] += dp[i & 1][j];
      dp[!(i & 1)][j] %= MOD;
    }
    for (int j = (0); j < (k + 1); ++j) {
      if (j == s[i] - 'a') {
        continue;
      }
      dp[!(i & 1)][s[i] - 'a'] += dp[i & 1][j];
      dp[!(i & 1)][s[i] - 'a'] %= MOD;
    }
  }
  long long res = 0;
  for (int i = (0); i < (k + 1); ++i) {
    res += dp[(n + m) & 1][i];
    res %= MOD;
  }
  cout << res;
}
