#include <stdbool.h>
#include <stdio.h>
bool isUnique(char x[], int y)
{
for (int i = 0; i < (y-1); i++)
for (int j = i+1; j < y; j++)
if (x[i] == x[j])
return false;
return true;
}
void perm(char a[], char b[], int x, int y)
{
if ((y == x) && isUnique(b,x))
{
b[y] = '\0';
}
else
{
for (int i = 0; i < x; i++)
{
b[y] = a[i];
if (y < x)
perm(a,b,x,y+1);
}
}
}
int main(void)
{
char a[] = {'1','2','3','4'};
char b[] = {'\0','\0','\0','\0','\0'};
perm(a,b,4,0);
return 0;
}
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+Cgpib29sIGlzVW5pcXVlKGNoYXIgeFtdLCBpbnQgeSkKewogICBmb3IgKGludCBpID0gMDsgaSA8ICh5LTEpOyBpKyspCiAgICAgZm9yIChpbnQgaiA9IGkrMTsgaiA8IHk7IGorKykKICAgICAgIGlmICh4W2ldID09IHhbal0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAKICAgcmV0dXJuIHRydWU7Cn0Kdm9pZCBwZXJtKGNoYXIgYVtdLCBjaGFyIGJbXSwgaW50IHgsIGludCB5KQp7CiAgIGlmICgoeSA9PSB4KSAmJiBpc1VuaXF1ZShiLHgpKQogICB7CiAgICAgYlt5XSA9ICdcMCc7CiAgICAgcHJpbnRmKCIlc1xuIiwgYik7CiAgIH0KICAgZWxzZQogICB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpKyspCiAgICAgewogICAgICAgIGJbeV0gPSBhW2ldOwogICAgICAgIGlmICh5IDwgeCkKICAgICAgICAgIHBlcm0oYSxiLHgseSsxKTsKICAgICB9CiAgIH0KfQppbnQgbWFpbih2b2lkKQp7CiAgIGNoYXIgYVtdID0geycxJywnMicsJzMnLCc0J307CiAgIGNoYXIgYltdID0geydcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJ307CiAgIHBlcm0oYSxiLDQsMCk7CiAgIHJldHVybiAwOwp9