void Permutation(int cnt, int n, char *str)
{
if(!str || cnt<=0 || n<=0)
return;
static unsigned num=1;
if(cnt==n)
{
printf("%u: %s\n", num++, str);
for(int i=n-1; i>0; --i)
{
str[i]^=str[i-1];
str[i-1]^=str[i];
str[i]^=str[i-1];
printf("%u: %s\n", num++, str);
}
for(int i=0; i<n-1; ++i)
{
str[i]^=str[i+1];
str[i+1]^=str[i];
str[i]^=str[i+1];
}
}
else
{
Permutation(cnt+1, n, str);
for(int i=cnt-1; i>0; --i)
{
str[i]^=str[i-1];
str[i-1]^=str[i];
str[i]^=str[i-1];
Permutation(cnt+1, n, str);
}
for(int i=0; i<cnt-1; ++i)
{
str[i]^=str[i+1];
str[i+1]^=str[i];
str[i]^=str[i+1];
}
{
if(!str || cnt<=0 || n<=0)
return;
static unsigned num=1;
if(cnt==n)
{
printf("%u: %s\n", num++, str);
for(int i=n-1; i>0; --i)
{
str[i]^=str[i-1];
str[i-1]^=str[i];
str[i]^=str[i-1];
printf("%u: %s\n", num++, str);
}
for(int i=0; i<n-1; ++i)
{
str[i]^=str[i+1];
str[i+1]^=str[i];
str[i]^=str[i+1];
}
}
else
{
Permutation(cnt+1, n, str);
for(int i=cnt-1; i>0; --i)
{
str[i]^=str[i-1];
str[i-1]^=str[i];
str[i]^=str[i-1];
Permutation(cnt+1, n, str);
}
for(int i=0; i<cnt-1; ++i)
{
str[i]^=str[i+1];
str[i+1]^=str[i];
str[i]^=str[i+1];
}
}
if(cnt==1)
num=1;