从最后开始枚举s,找到第一个点p,存在s[p]大于s[p + i](i > 0);
#include <iostream>
#include <algorithm>
using namespace std;
string s;
int cmp(int a, int b){
return a < b;
}
int handle(string &s){
int ok = 0;
int p = -1;
int len = s.size();
for(int i = len-1; i > 0; --i){
if(s[i] > s[i - 1]){
p = i - 1;
ok = 1;
break;
}
}
if(ok){
for(int i = len - 1; i >= 0; --i){
if(s[i] > s[p]){
char t = s[i];
s[i] = s[p];
s[p] = t;
break;
}
}
sort(s.begin() + p + 1, s.end());
}
return ok;
}
int main()
{
while(cin >> s && s[0] != '#'){
if(handle(s))
cout << s << endl;
else
cout << "No Successor" << endl;
}
}