#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
bool cmpBySecond(const std::pair<char, int>& a, const std::pair<char, int>& b) {
if (a.second == b.second) return a.first < b.first;
return a.second < b.second;
}
std::string reorder(const std::string& input) {
std::map<char, int> cnt;
for (auto& c: input) cnt[c]++;
auto items = std::vector<std::pair<char, int>>(cnt.begin(), cnt.end());
std::sort(items.begin(), items.end(), cmpBySecond);
std::reverse(items.begin(), items.end());
// now we have chars with occurencies counts in descending order
std::string result(input);
int pos = 0;
for (auto& it: items) {
char c = it.first;
int times = it.second;
for (int i = 0; i < times; ++i) {
result[pos] = c;
pos += 2;
if (pos >= result.size()) pos = 1;
}
}
return result;
}
int main()
{
std::cout << reorder("aaabb") << std::endl;
std::cout << reorder("abcde") << std::endl;
std::cout << reorder("aaabbb") << std::endl;
std::cout << reorder("aabbc") << std::endl;
std::cout << reorder("qqqq") << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKYm9vbCBjbXBCeVNlY29uZChjb25zdCBzdGQ6OnBhaXI8Y2hhciwgaW50PiYgYSwgY29uc3Qgc3RkOjpwYWlyPGNoYXIsIGludD4mIGIpIHsKICAgIGlmIChhLnNlY29uZCA9PSBiLnNlY29uZCkgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwogICAgcmV0dXJuIGEuc2Vjb25kIDwgYi5zZWNvbmQ7Cn0KCnN0ZDo6c3RyaW5nIHJlb3JkZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KSB7CiAgICBzdGQ6Om1hcDxjaGFyLCBpbnQ+IGNudDsKICAgIGZvciAoYXV0byYgYzogaW5wdXQpIGNudFtjXSsrOwogICAgYXV0byBpdGVtcyA9IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxjaGFyLCBpbnQ+PihjbnQuYmVnaW4oKSwgY250LmVuZCgpKTsKICAgIHN0ZDo6c29ydChpdGVtcy5iZWdpbigpLCBpdGVtcy5lbmQoKSwgY21wQnlTZWNvbmQpOwogICAgc3RkOjpyZXZlcnNlKGl0ZW1zLmJlZ2luKCksIGl0ZW1zLmVuZCgpKTsKICAgIC8vIG5vdyB3ZSBoYXZlIGNoYXJzIHdpdGggb2NjdXJlbmNpZXMgY291bnRzIGluIGRlc2NlbmRpbmcgb3JkZXIKICAgIHN0ZDo6c3RyaW5nIHJlc3VsdChpbnB1dCk7CiAgICBpbnQgcG9zID0gMDsKICAgIGZvciAoYXV0byYgaXQ6IGl0ZW1zKSB7CiAgICAgICAgY2hhciBjID0gaXQuZmlyc3Q7CiAgICAgICAgaW50IHRpbWVzID0gaXQuc2Vjb25kOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGltZXM7ICsraSkgewogICAgICAgICAgICByZXN1bHRbcG9zXSA9IGM7CiAgICAgICAgICAgIHBvcyArPSAyOwogICAgICAgICAgICBpZiAocG9zID49IHJlc3VsdC5zaXplKCkpIHBvcyA9IDE7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgcmVvcmRlcigiYWFhYmIiKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgcmVvcmRlcigiYWJjZGUiKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgcmVvcmRlcigiYWFhYmJiIikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IHJlb3JkZXIoImFhYmJjIikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IHJlb3JkZXIoInFxcXEiKSA8PCBzdGQ6OmVuZGw7Cn0K