#include <algorithm>
#include <vector>
#include <memory>
#include <iostream>
#include <array>
#include <iterator>
template<class pred_type>
struct iter_pred {
pred_type p;
iter_pred(const pred_type& p_) :p(p_) {}
template<class in_iter>
bool operator()(in_iter lhs, in_iter rhs)
{return p(*lhs, *rhs);}
};
template<class in_iter, class out_iter, class pred_type>
out_iter sorted_copy(const in_iter& first, const in_iter& last, out_iter dest, const pred_type& pred) {
std::vector<in_iter> tmp;
for(in_iter i=first; i!=last; ++i)
tmp.push_back(i);
std::sort(tmp.begin(), tmp.end(), iter_pred<pred_type>(pred));
for(auto j=tmp.begin(); j!=tmp.end(); ++j)
*(dest++) = **j;
return dest;
}
template<class in_iter, class out_iter>
out_iter sorted_copy(const in_iter& first, const in_iter& last, out_iter dest)
{ return sorted_copy(first, last, dest, std::less<decltype(*first)>()); }
int main() {
std::array<int, 9> src = { { 5, 8, 2, 4, 9, 1, 9, 6, 0 } };
std::vector<int> dst;
sorted_copy(src.begin(), src.end(), std::back_inserter(dst));
std::copy(dst.begin(), dst.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxpdGVyYXRvcj4KIAp0ZW1wbGF0ZTxjbGFzcyBwcmVkX3R5cGU+CnN0cnVjdCBpdGVyX3ByZWQgewogICAgcHJlZF90eXBlIHA7CiAgICBpdGVyX3ByZWQoY29uc3QgcHJlZF90eXBlJiBwXykgOnAocF8pIHt9CiAgICB0ZW1wbGF0ZTxjbGFzcyBpbl9pdGVyPgogICAgYm9vbCBvcGVyYXRvcigpKGluX2l0ZXIgbGhzLCBpbl9pdGVyIHJocykgCiAgICB7cmV0dXJuIHAoKmxocywgKnJocyk7fQp9OwogCnRlbXBsYXRlPGNsYXNzIGluX2l0ZXIsIGNsYXNzIG91dF9pdGVyLCBjbGFzcyBwcmVkX3R5cGU+IApvdXRfaXRlciBzb3J0ZWRfY29weShjb25zdCBpbl9pdGVyJiBmaXJzdCwgY29uc3QgaW5faXRlciYgbGFzdCwgb3V0X2l0ZXIgZGVzdCwgY29uc3QgcHJlZF90eXBlJiBwcmVkKSB7CiAgICBzdGQ6OnZlY3Rvcjxpbl9pdGVyPiB0bXA7CiAgICBmb3IoaW5faXRlciBpPWZpcnN0OyBpIT1sYXN0OyArK2kpCiAgICAgICB0bXAucHVzaF9iYWNrKGkpOwogICAgc3RkOjpzb3J0KHRtcC5iZWdpbigpLCB0bXAuZW5kKCksIGl0ZXJfcHJlZDxwcmVkX3R5cGU+KHByZWQpKTsKICAgIGZvcihhdXRvIGo9dG1wLmJlZ2luKCk7IGohPXRtcC5lbmQoKTsgKytqKQogICAgICAgKihkZXN0KyspID0gKipqOwogICAgcmV0dXJuIGRlc3Q7Cn0KCnRlbXBsYXRlPGNsYXNzIGluX2l0ZXIsIGNsYXNzIG91dF9pdGVyPiAKb3V0X2l0ZXIgc29ydGVkX2NvcHkoY29uc3QgaW5faXRlciYgZmlyc3QsIGNvbnN0IGluX2l0ZXImIGxhc3QsIG91dF9pdGVyIGRlc3QpCnsgcmV0dXJuIHNvcnRlZF9jb3B5KGZpcnN0LCBsYXN0LCBkZXN0LCBzdGQ6Omxlc3M8ZGVjbHR5cGUoKmZpcnN0KT4oKSk7IH0KIAppbnQgbWFpbigpIHsKICAgIHN0ZDo6YXJyYXk8aW50LCA5PiBzcmMgPSB7IHsgNSwgOCwgMiwgNCwgOSwgMSwgOSwgNiwgMCB9IH07CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGRzdDsKICAgIHNvcnRlZF9jb3B5KHNyYy5iZWdpbigpLCBzcmMuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlcihkc3QpKTsKICAgIHN0ZDo6Y29weShkc3QuYmVnaW4oKSwgZHN0LmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwogICAgcmV0dXJuIDA7Cn0=