/*
题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串
也不包含长度>1的任何回文子串!
思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i-2位相同就好了!那么因为前边i-1
位没有长度>1的回文子串,那么前i位也不会出现!最后将最后边的字符按照相同的原则补齐就好了!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[1005];
int main(){
int n, p;
while(scanf("%d%d", &n, &p)!=EOF){
ch[0]='0';
ch[1]='0';
int up='a'+p-1;
scanf("%s", ch+2);//从字符串第二位输入是因为第一位,第二位也要枚举
bool flag=false;
for(int i=++n; i>=2 && !flag; --i){//枚举每一位
for(int j=ch[i]+1; j<=up && !flag; ++j){//每一位应该出现的字符(从小到大)
ch[i]=j;
if(ch[i]!=ch[i-1] && ch[i]!=ch[i-2]){//保证三者互不相同
flag=true;
for(int k=i+1; k<=n; ++k){//补全后面
int cc;
for(cc='a'; cc<=up; ++cc)
if(cc!=ch[k-1] && cc!=ch[k-2]) break;
ch[k]=cc;
}
}
}
}
if(flag) printf("%s\n", ch+2);
else printf("NO\n");
}
return 0;
}