#include <stdbool.h>
#include <stdio.h>
bool isUnique(const char x[], const 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(const char a[], char b[], const int x, const 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)
{
const char a[] = { '1', '2', '3', '4' };
char b[] = { '\0', '\0', '\0', '\0', '\0' };
perm(a, b, 4, 0);
}
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+Cgpib29sIGlzVW5pcXVlKGNvbnN0IGNoYXIgeFtdLCBjb25zdCBpbnQgeSkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoeS0xKTsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSBpKzE7IGogPCB5OyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAoeFtpXSA9PSB4W2pdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAgICAgICAKICAgIHJldHVybiB0cnVlOwp9Cgp2b2lkIHBlcm0oY29uc3QgY2hhciBhW10sIGNoYXIgYltdLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHkpCnsKICAgIGlmICgoeSA9PSB4KSAmJiBpc1VuaXF1ZShiLCB4KSkKICAgIHsKICAgICAgICBiW3ldID0gJ1wwJzsKICAgICAgICBwcmludGYoIiVzXG4iLCBiKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHg7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGJbeV0gPSBhW2ldOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwZXJtKGEsIGIsIHgsIHkrMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGNvbnN0IGNoYXIgYVtdID0geyAnMScsICcyJywgJzMnLCAnNCcgfTsKICAgIGNoYXIgYltdID0geyAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnIH07CiAgIAogICAgcGVybShhLCBiLCA0LCAwKTsKfQ==