Find an algorithm (subroutine) that when called repeatedly with the same character-string variable that is initialized with n characters, all different, will cycle through all the permutations of those n characters, so that for example, when called 24 times with a string of length 4, will have cycled that string through all 24 permutations and returned it to its initial state.
The C++ standard library strikes again!
void shuffle(std::string& input)
{
  std::next_permutation(input.begin(), input.end());
}