#include <bits/stdc++.h>
using namespace std;
inline int lowbit(int x) { return x & -x; }
inline int ABS(int x) { return x < 0 ? -x : x; }
inline long long ABS(long long x) { return x < 0 ? -x : x; }
inline void MAX(int &a, int b) {
  if (b > a) a = b;
}
inline void MAX(long long &a, long long b) {
  if (b > a) a = b;
}
inline void MIN(int &a, int b) {
  if (b < a) a = b;
}
inline void MIN(long long &a, long long b) {
  if (b < a) a = b;
}
int fast(int x, int v) {
  int ans = 1;
  for (; v; v >>= 1, x = (long long)x * x % 1000000007)
    if (v & 1) ans = (long long)ans * x % 1000000007;
  return ans;
}
long long fast(long long x, long long v) {
  long long ans = 1;
  for (; v; v >>= 1, x = x * x % 1000000007)
    if (v & 1) ans = ans * x % 1000000007;
  return ans;
}
int n, p;
char s[1005];
void work(int i) {
  if (i > n) return;
  s[i] = 'a' - 1;
  if (s[i] + 1 <= p && s[i - 1] != s[i] + 1 &&
      (i == 1 || s[i - 2] != s[i] + 1)) {
    s[i] = s[i] + 1;
    work(i + 1);
    return;
  }
  if (s[i] + 2 <= p && s[i - 1] != s[i] + 2 &&
      (i == 1 || s[i - 2] != s[i] + 2)) {
    s[i] = s[i] + 2;
    work(i + 1);
    return;
  }
  if (s[i] + 3 <= p && s[i - 1] != s[i] + 3 &&
      (i == 1 || s[i - 2] != s[i] + 3)) {
    s[i] = s[i] + 3;
    work(i + 1);
    return;
  }
}
void check() {
  for (int i = 2; i <= n; ++i)
    if (s[i] == s[i - 1] || s[i] == s[i - 2]) return;
  puts(s + 1);
  exit(0);
}
int main() {
  scanf("%d%d", &n, &p);
  p += 'a';
  p--;
  scanf("%s", s + 1);
  for (int i = n; i >= 1; --i) {
    if (s[i] + 1 <= p && s[i - 1] != s[i] + 1 &&
        (i == 1 || s[i - 2] != s[i] + 1)) {
      s[i] = s[i] + 1;
      work(i + 1);
      check();
    }
    if (s[i] + 2 <= p && s[i - 1] != s[i] + 2 &&
        (i == 1 || s[i - 2] != s[i] + 2)) {
      s[i] = s[i] + 2;
      work(i + 1);
      check();
    }
    if (s[i] + 3 <= p && s[i - 1] != s[i] + 3 &&
        (i == 1 || s[i - 2] != s[i] + 3)) {
      s[i] = s[i] + 3;
      work(i + 1);
      check();
    }
  }
  puts("NO");
}
