I would like a C# algorithm that re-arranges the chars in a string that is dynamic in length. Having trouble finding one and I know there has to be one out there.

The algorithm has to realign elements to form new strings in all possible combinations.

For instance, "cat" would produce the following:  

**cat cta tca tac act atc**