#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b){return *(char *)a - *(char *)b;}
char *f(char *s, int n) {
char c
, *p
, *q
, *min
, *e
= s
+ strlen(s
); while (0 < --n)
for (p = e - 2; s <= p; p--)
if (p[0] < p[1]) {
for (min = q = p + 1; q < e; q++)
if (*p < *q && *q < *min) min = q;
c = *p;*p = *min;*min = c;
qsort(p
+ 1, e
- (p
+ 1), sizeof *p
, compare
); 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;
}
I2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgppbnQgY29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKXtyZXR1cm4gKihjaGFyICopYSAtICooY2hhciAqKWI7fQpjaGFyICpmKGNoYXIgKnMsIGludCBuKSB7CiAgY2hhciBjLCAqcCwgKnEsICptaW4sICplID0gcyArIHN0cmxlbihzKTsKICB3aGlsZSAoMCA8IC0tbikKICAgIGZvciAocCA9IGUgLSAyOyBzIDw9IHA7IHAtLSkKICAgICAgaWYgKHBbMF0gPCBwWzFdKSB7CiAgICAgICAgZm9yIChtaW4gPSBxID0gcCArIDE7IHEgPCBlOyBxKyspCiAgICAgICAgICBpZiAoKnAgPCAqcSAmJiAqcSA8ICptaW4pIG1pbiA9IHE7CiAgICAgICAgYyA9ICpwOypwID0gKm1pbjsqbWluID0gYzsKICAgICAgICBxc29ydChwICsgMSwgZSAtIChwICsgMSksIHNpemVvZiAqcCwgY29tcGFyZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICByZXR1cm4gczsKfQppbnQgbWFpbigpIHsKICBjaGFyIGJ1ZmZbNjRdOwojZGVmaW5lIGcocywgbikgcHJpbnRmKCIlc1xuIiwgZihzdHJjcHkoYnVmZiwgKHMpKSwgKG4pKSkKICBnKCIxMjM0NTY3ODkiLCAxKTsKICBnKCIxMjM0NTY3ODkiLCAyKTsKICBnKCIxMjM0NTY3ODkiLCAzKTsKICBnKCIxMjM0NTY3ODkiLCAxMjM0NTYpOwogIGcoIjEyMzQ1Njc4OSIsIDIzNDU2Nyk7CiAgZygiMTIzNDU2Nzg5IiwgMzYyODgwKTsKICBnKCIxMTEyMjIzMzM0NDQiLCAxKTsKICBnKCIxMTEyMjIzMzM0NDQiLCAyKTsKICBnKCIxMTEyMjIzMzM0NDQiLCAzKTsKICBnKCIxMTEyMjIzMzM0NDQiLCAxMjM0NTYpOwogIGcoIjExMTIyMjMzMzQ0NCIsIDIzNDU2Nyk7CiAgZygiMTExMjIyMzMzNDQ0IiwgMzM2OTYwMCk7CiN1bmRlZiBnCiAgcmV0dXJuIDA7Cn0K