#include <stdio.h>
void swap(char *x, char *y){
char w;
w = *x;
*x = *y;
*y = w;
}
void permute(char *str, int start, int n, int minLength, int maxLength)
{
int i;
if (start >= minLength)
{
char temp = str[start]; // store the character, so we don't lose it
str[start] = 0; // 0x00 - end of string
str[start] = temp;
}
if (start == maxLength)
return;
for (i = start; i < n; i++)
{
swap(str+i, str+start);
permute(str, start+1, n, minLength, maxLength);
swap(str+i, str+start);
}
}
int main(void) {
char arr[] = "abcde ";
permute(arr, 0, 5, 2, 4);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHN3YXAoY2hhciAqeCwgY2hhciAqeSl7CiAgICBjaGFyIHc7CiAgICB3ID0gKng7CiAgICAqeCA9ICp5OwogICAgKnkgPSB3Owp9Cgp2b2lkIHBlcm11dGUoY2hhciAqc3RyLCBpbnQgc3RhcnQsIGludCBuLCBpbnQgbWluTGVuZ3RoLCBpbnQgbWF4TGVuZ3RoKQp7CiAgICBpbnQgaTsKCiAgICBpZiAoc3RhcnQgPj0gbWluTGVuZ3RoKQogICAgewogICAgICAgIGNoYXIgdGVtcCA9IHN0cltzdGFydF07IC8vIHN0b3JlIHRoZSBjaGFyYWN0ZXIsIHNvIHdlIGRvbid0IGxvc2UgaXQKICAgICAgICBzdHJbc3RhcnRdID0gMDsgLy8gMHgwMCAtIGVuZCBvZiBzdHJpbmcKICAgICAgICBwcmludGYoIiVzXG4iLCBzdHIpOwogICAgICAgIHN0cltzdGFydF0gPSB0ZW1wOwogICAgfQoKICAgIGlmIChzdGFydCA9PSBtYXhMZW5ndGgpCiAgICAgICAgcmV0dXJuOwoKICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIHN3YXAoc3RyK2ksIHN0citzdGFydCk7CiAgICAgICAgcGVybXV0ZShzdHIsIHN0YXJ0KzEsIG4sIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKTsKICAgICAgICBzd2FwKHN0citpLCBzdHIrc3RhcnQpOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CgljaGFyIGFycltdID0gImFiY2RlICI7CglwZXJtdXRlKGFyciwgMCwgNSwgMiwgNCk7CglyZXR1cm4gMDsKfQo=