
#include <iostream>


using namespace std;


void rec_permute (string& s, unsigned k)
{
     if (k == s.length() - 1)
           cout << s << endl;
     else 
           for (unsigned i = k; i < s.length(); i++)
           {
                swap (s [i], s [k]);    // swap is a generic algorithm
                cout << "Swapping s[i], i = " << i << " and s[k], k = " << k << endl;
                cout << "rec_permute(" << s << ", " << k+1 << ")" << endl << endl;
                rec_permute (s, k + 1);
                
           } // for
} // rec_permute

void permute (string& s)
   {
          rec_permute (s, 0);
            } // permute


int main()
{
  string monkey = "123";
  permute(monkey);
}
     

