#include <iostream>
#include <algorithm>
#include <iterator>
#include <utility>
#include <vector>

using namespace std;

struct ComparePair
{
    bool operator()(const pair<int, int> &lhs, const pair<int, int> &rhs)
    {
        return lhs.first < rhs.first;
    }
}comparePair;

int main(int argc, char *argv[])
{
	////////////////////////////
    // Custom
    vector<pair<int, int> > v;
    
    v.push_back(pair<int, int>(1, 3000));
    v.push_back(pair<int, int>(3, 5000));
    v.push_back(pair<int, int>(2, 9000));

    sort(v.begin(), v.end(), comparePair);
    
    do
    {
        for(const auto &i : v)
        {
            cout << i.first << ' ' << i.second << ' ';
        }
        putchar('\n');
    }
    while(next_permutation(v.begin(), v.end(), comparePair));

    ////////////////////////////
    // Default
    int arr[] = {1, 2, 3};
    do
    {
        // Do something
        for(const int i : arr)
            printf("%d ", i);
        putchar('\n');
    }
    while(next_permutation(arr, arr+3));

    return 0;
}