#include <string.h>
#include <stdio.h>
void rev(char *b, char *e) {
char c;
for (e--; b < e; b++, e--) c = *b, *b = *e, *e = c;
}
char *f(char *s, int n) {
char c
, *p
, *q
, *e
= s
+ strlen(s
); while (0 < --n)
for (p = e - 2; s <= p; p--)
if (p[0] < p[1]) {
for (q = e - 1; p < q && *q <= *p; q--);
c = *p;*p = *q;*q = c;
rev(p + 1, e);
break;
}
return s;
}
int main() {
char buff[64];
#define g(s, n) printf("%s\n", f(strcpy(buff, (s)), (n)))
g("123456789", 1);
g("123456789", 2);
g("123456789", 3);
g("123456789", 123456);
g("123456789", 234567);
g("123456789", 362880);
g("111222333444", 1);
g("111222333444", 2);
g("111222333444", 3);
g("111222333444", 123456);
g("111222333444", 234567);
g("111222333444", 3369600);
#undef g
return 0;
}
I2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkaW8uaD4Kdm9pZCByZXYoY2hhciAqYiwgY2hhciAqZSkgewogIGNoYXIgYzsKICBmb3IgKGUtLTsgYiA8IGU7IGIrKywgZS0tKSBjID0gKmIsICpiID0gKmUsICplID0gYzsKfQpjaGFyICpmKGNoYXIgKnMsIGludCBuKSB7CiAgY2hhciBjLCAqcCwgKnEsICplID0gcyArIHN0cmxlbihzKTsKICB3aGlsZSAoMCA8IC0tbikKICAgIGZvciAocCA9IGUgLSAyOyBzIDw9IHA7IHAtLSkKICAgICAgaWYgKHBbMF0gPCBwWzFdKSB7CiAgICAgICAgZm9yIChxID0gZSAtIDE7IHAgPCBxICYmICpxIDw9ICpwOyBxLS0pOwogICAgICAgIGMgPSAqcDsqcCA9ICpxOypxID0gYzsKICAgICAgICByZXYocCArIDEsIGUpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgcmV0dXJuIHM7Cn0KaW50IG1haW4oKSB7CiAgY2hhciBidWZmWzY0XTsKI2RlZmluZSBnKHMsIG4pIHByaW50ZigiJXNcbiIsIGYoc3RyY3B5KGJ1ZmYsIChzKSksIChuKSkpCiAgZygiMTIzNDU2Nzg5IiwgMSk7CiAgZygiMTIzNDU2Nzg5IiwgMik7CiAgZygiMTIzNDU2Nzg5IiwgMyk7CiAgZygiMTIzNDU2Nzg5IiwgMTIzNDU2KTsKICBnKCIxMjM0NTY3ODkiLCAyMzQ1NjcpOwogIGcoIjEyMzQ1Njc4OSIsIDM2Mjg4MCk7CiAgZygiMTExMjIyMzMzNDQ0IiwgMSk7CiAgZygiMTExMjIyMzMzNDQ0IiwgMik7CiAgZygiMTExMjIyMzMzNDQ0IiwgMyk7CiAgZygiMTExMjIyMzMzNDQ0IiwgMTIzNDU2KTsKICBnKCIxMTEyMjIzMzM0NDQiLCAyMzQ1NjcpOwogIGcoIjExMTIyMjMzMzQ0NCIsIDMzNjk2MDApOwojdW5kZWYgZwogIHJldHVybiAwOwp9Cg==