#include <iostream>
#include <vector>
#include <tuple>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
std::vector<int> data = {7,8,8,8, 9, 2, 7, 9};
std::multiset<int> count(data.begin(), data.end());
std::sort(
data.begin()
, data.end()
, [&](int a, int b) {
int ca = count.count(a);
int cb = count.count(b);
return std::tie(ca, a) > std::tie(cb, b);
}
);
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJc3RkOjp2ZWN0b3I8aW50PiBkYXRhID0gezcsOCw4LDgsIDksIDIsIDcsIDl9OwoJc3RkOjptdWx0aXNldDxpbnQ+IGNvdW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSk7CglzdGQ6OnNvcnQoCgkgICAgZGF0YS5iZWdpbigpCgksICAgZGF0YS5lbmQoKQoJLCAgIFsmXShpbnQgYSwgaW50IGIpIHsKCSAgICAgICAgaW50IGNhID0gY291bnQuY291bnQoYSk7CgkgICAgICAgIGludCBjYiA9IGNvdW50LmNvdW50KGIpOwoJICAgICAgICByZXR1cm4gc3RkOjp0aWUoY2EsIGEpID4gc3RkOjp0aWUoY2IsIGIpOwoJICAgIH0KCSk7CglzdGQ6OmNvcHkoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwoJcmV0dXJuIDA7Cn0=