// Example 13-4: Generating permutations
#include <algorithm>
#include <iostream>
#include <istream>
#include <iterator>
#include <ostream>
#include <vector>

void print(const std::vector<int>& v)
{
  std::copy(v.begin(), v.end(),
            std::ostream_iterator<int>(std::cout, " "));
  std::cout << '\n';
}

int main()
{
  std::cout << "Enter a few integers, followed by EOF:";
  std::istream_iterator<int> start(std::cin);
  std::istream_iterator<int> end;
  std::vector<int> v(start, end);

  // Start with the first permutation (ascending order).
  std::sort(v.begin(), v.end());
  print(v);

  // Print all the subsequent permutations.
  while (std::next_permutation(v.begin(), v.end()))
    print(v);
}
