#include <cstddef>
#include <algorithm>
#include <iterator>
#include <iostream>
template<typename T, ::std::size_t N>
static ::std::ostream& print_array(::std::ostream& out, T(&arr)[N]) {
out << "[" << arr[0];
for(::std::size_t i = 1; i < N; ++i) {
out << ", " << arr[i];
}
out << "]";
return out;
}
int main() {
int array[] = {1, 3, 2, 4};
auto begin = ::std::begin(array);
auto end = ::std::end(array);
::std::sort(begin, end);
print_array(::std::cout, array) << "\n";
::std::sort(begin, end, [](int lhs, int rhs) { return lhs > rhs; });
print_array(::std::cout, array) << "\n";
::std::sort(begin, end, [](int lhs, int rhs) {
if(lhs%2 != rhs%2) return lhs%2 < rhs%2;
else return lhs > rhs;
});
print_array(::std::cout, array) << "\n";
}
I2luY2x1ZGUgPGNzdGRkZWY+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgOjpzdGQ6OnNpemVfdCBOPgpzdGF0aWMgOjpzdGQ6Om9zdHJlYW0mIHByaW50X2FycmF5KDo6c3RkOjpvc3RyZWFtJiBvdXQsIFQoJmFycilbTl0pIHsKCW91dCA8PCAiWyIgPDwgYXJyWzBdOwoJZm9yKDo6c3RkOjpzaXplX3QgaSA9IDE7IGkgPCBOOyArK2kpIHsKCQlvdXQgPDwgIiwgIiA8PCBhcnJbaV07Cgl9CglvdXQgPDwgIl0iOwoJcmV0dXJuIG91dDsKfQoKaW50IG1haW4oKSB7CglpbnQgYXJyYXlbXSA9IHsxLCAzLCAyLCA0fTsKCWF1dG8gYmVnaW4gPSA6OnN0ZDo6YmVnaW4oYXJyYXkpOwoJYXV0byBlbmQgPSA6OnN0ZDo6ZW5kKGFycmF5KTsKCQoJOjpzdGQ6OnNvcnQoYmVnaW4sIGVuZCk7CglwcmludF9hcnJheSg6OnN0ZDo6Y291dCwgYXJyYXkpIDw8ICJcbiI7CgkKCTo6c3RkOjpzb3J0KGJlZ2luLCBlbmQsIFtdKGludCBsaHMsIGludCByaHMpIHsgcmV0dXJuIGxocyA+IHJoczsgfSk7CglwcmludF9hcnJheSg6OnN0ZDo6Y291dCwgYXJyYXkpIDw8ICJcbiI7CgkKCTo6c3RkOjpzb3J0KGJlZ2luLCBlbmQsIFtdKGludCBsaHMsIGludCByaHMpIHsKCQlpZihsaHMlMiAhPSByaHMlMikgcmV0dXJuIGxocyUyIDwgcmhzJTI7CgkJZWxzZSByZXR1cm4gbGhzID4gcmhzOwoJfSk7CglwcmludF9hcnJheSg6OnN0ZDo6Y291dCwgYXJyYXkpIDw8ICJcbiI7Cn0=