#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);
}
ICAgICNpbmNsdWRlIDxzdGRib29sLmg+CiAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICAgIAogICAgYm9vbCBpc1VuaXF1ZShjb25zdCBjaGFyIHhbXSwgY29uc3QgaW50IHkpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoeS0xKTsgaSsrKQogICAgICAgICAgICBmb3IgKGludCBqID0gaSsxOyBqIDwgeTsgaisrKQogICAgICAgICAgICAgICAgaWYgKHhbaV0gPT0geFtqXSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIHZvaWQgcGVybShjb25zdCBjaGFyIGFbXSwgY2hhciBiW10sIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSkKICAgIHsKICAgICAgICBpZiAoKHkgPT0geCkgJiYgaXNVbmlxdWUoYiwgeCkpCiAgICAgICAgewogICAgICAgICAgICBiW3ldID0gJ1wwJzsKICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgYik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiW3ldID0gYVtpXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHkgPCB4KQogICAgICAgICAgICAgICAgICAgIHBlcm0oYSwgYiwgeCwgeSsxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgaW50IG1haW4odm9pZCkKICAgIHsKICAgICAgIGNvbnN0IGNoYXIgYVtdID0geyAnMScsICcyJywgJzMnLCAnNCcgfTsKICAgICAgIGNoYXIgYltdID0geyAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnIH07CiAgICAgICAKICAgICAgIHBlcm0oYSwgYiwgNCwgMCk7CiAgICB9