#include<stdio.h>
int main()
{
char a[]="ABCD";
permute(a,0,3);
return 0;
}
void permute(char *a,int i,int n)
{
int j;
if(i==n)
{
}
else
{
for(j=i;j<=n;j++)
{
if(Match(a,i,j)==0)
{
swap(a+i,a+j);
permute(a,i+1,n);
// swap(a+i,a+j); //backtrack
}
}
}
}
int Match(char *a,int i,int j)
{
if(i==j)
{
return 0;
}
else
{
for(;i<j;i++)
{
// printf("%c==%c \n",*(a+i),*(a+j));
if(*(a+i)==*(a+j))
{
return 1;
}
}
return 0;
}
}
void swap(char *x,char *y)
{
char temp;
temp=*x;
*x=*y;
*y=temp;
}
I2luY2x1ZGU8c3RkaW8uaD4KCmludCBtYWluKCkKewogICAgY2hhciBhW109IkFCQ0QiOwogICAgcGVybXV0ZShhLDAsMyk7CiAgICByZXR1cm4gMDsKfQp2b2lkIHBlcm11dGUoY2hhciAqYSxpbnQgaSxpbnQgbikKewogICAgaW50IGo7ICAgCiAgICAKICAgIGlmKGk9PW4pCiAgICB7CiAgICAgICAgcHJpbnRmKCIlcyBcbiIsYSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZm9yKGo9aTtqPD1uO2orKykKICAgICAgICB7CiAgICAgICAgIGlmKE1hdGNoKGEsaSxqKT09MCkKICAgICAgICAgewogICAgICAgICAgIAogICAgICAgICAgIHN3YXAoYStpLGEraik7CiAgICAgICAgICAgIHBlcm11dGUoYSxpKzEsbik7CiAgICAgICAgICAgLy8gc3dhcChhK2ksYStqKTsgLy9iYWNrdHJhY2sKICAgICAgICB9CiAgICAgICAgfQogICAgfQogCn0KaW50IE1hdGNoKGNoYXIgKmEsaW50IGksaW50IGopCnsKICAgIGlmKGk9PWopCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZm9yKDtpPGo7aSsrKQogICAgICAgIHsKICAgICAgICAgIC8vIHByaW50ZigiJWM9PSVjIFxuIiwqKGEraSksKihhK2opKTsKICAgICAgICAgICAgaWYoKihhK2kpPT0qKGEraikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KfQp2b2lkIHN3YXAoY2hhciAqeCxjaGFyICp5KQp7CiAgICBjaGFyIHRlbXA7CiAgIAogICB0ZW1wPSp4OwogICAKICAgICp4PSp5OwogICAgKnk9dGVtcDsKfQoKCg==