/*
题意:给你一个字符串,寻找按照字典序排的下一个符合条件的字符串
下一个满足的字符串一定是改变尽量靠右的字符才能得到(字典序),
从最右面开始找,假设当前是第i位,如果i位增加之后满足和i-1,i-2位均不相同的话,
那么最小的肯定就是从这里开始改的(因为前缀没有回文字串,所以改变i位后的串也不会有),
接下来就把后面的为都补全。
*/
# include
# include
# include
# include
using namespace std; char a[1234567]; int n,p; bool judge(int now) { for(int i=1;; i++) { if(a[now]+i>'a'+p-1) return false; if(now>0&&a[now]+i==a[now-1]) continue; if(now>1&&a[now]+i==a[now-2]) continue; a[now]+=i; return true; } } void get(int now) { for(int i=0;; i++) { if(now>0&&'a'+i==a[now-1]) continue; if(now>1&&'a'+i==a[now-2]) continue; a[now]='a'+i; return ; } } int main() { scanf("%d%d",&n,&p); scanf("%s",a); int ok=0; int i; for( i=n-1; i>=0; i--) { if(judge(i)) { ok=1; break; } } if(ok) { for( i=i+1; i