public static void Main()
char[] arr = str.ToCharArray();
Permute(arr, 0, arr.Length - 1);
private static void Swap(ref char a, ref char b)
private static void SwapUsingBitWise(ref char a, ref char b)
private static void Permute(char[] elements, int recursionDepth, int maxDepth)
if (recursionDepth == maxDepth)
Console.WriteLine(elements);
for (int i = recursionDepth; i <= maxDepth; i++)
Swap(ref elements[recursionDepth], ref elements[i]);
Permute(elements, recursionDepth + 1, maxDepth);
Swap(ref elements[recursionDepth], ref elements[i]);