#include <iostream>
#include <string>
#include <regex>
std::string rr(const std::string& s) {
if (s.empty()) return s;
std::string c;
int cnt = 1;
// 압축 문자열 생성
for (size_t i = 1; i < s.length(); ++i) {
if (s[i] == s[i - 1]) {
cnt++;
} else {
c += s[i - 1] + std::to_string(cnt); // 문자와 그에 해당하는 개수 추가
cnt = 1;
}
}
c += s.back() + std::to_string(cnt); // 마지막 문자와 개수 추가
// 압축된 문자열이 원본보다 길면 원본 반환
if (c.length() < s.length()) return c;
// '1'을 제거
std::regex pattern("([A-Za-z])1(?!\\d)"); // 문자 뒤의 '1' 제거
std::string fc = std::regex_replace(c, pattern, "$1");
// '1'을 제거한 후 압축된 문자열이 원본보다 짧으면 그 문자열을 반환
if (fc.length() < s.length()) return fc;
return s; // 원본이 가장 짧으면 원본 반환
}
int main() {
std::string input;
std::cin >> input;
std::cout << rr(input) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cmVnZXg+CgpzdGQ6OnN0cmluZyBycihjb25zdCBzdGQ6OnN0cmluZyYgcykgewogICAgaWYgKHMuZW1wdHkoKSkgcmV0dXJuIHM7CiAgICAKICAgIHN0ZDo6c3RyaW5nIGM7CiAgICBpbnQgY250ID0gMTsKCiAgICAvLyDslZXstpUg66y47J6Q7Je0IOyDneyEsQogICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICBpZiAoc1tpXSA9PSBzW2kgLSAxXSkgewogICAgICAgICAgICBjbnQrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjICs9IHNbaSAtIDFdICsgc3RkOjp0b19zdHJpbmcoY250KTsgLy8g66y47J6Q7JmAIOq3uOyXkCDtlbTri7ntlZjripQg6rCc7IiYIOy2lOqwgAogICAgICAgICAgICBjbnQgPSAxOwogICAgICAgIH0KICAgIH0KICAgIGMgKz0gcy5iYWNrKCkgKyBzdGQ6OnRvX3N0cmluZyhjbnQpOyAvLyDrp4jsp4Drp4kg66y47J6Q7JmAIOqwnOyImCDstpTqsIAKICAgIAogICAgLy8g7JWV7LaV65CcIOusuOyekOyXtOydtCDsm5Drs7jrs7Tri6Qg6ri466m0IOybkOuzuCDrsJjtmZgKICAgIGlmIChjLmxlbmd0aCgpIDwgcy5sZW5ndGgoKSkgcmV0dXJuIGM7CiAgICAKICAgIC8vICcxJ+ydhCDsoJzqsbAKICAgIHN0ZDo6cmVnZXggcGF0dGVybigiKFtBLVphLXpdKTEoPyFcXGQpIik7IC8vIOusuOyekCDrkqTsnZggJzEnIOygnOqxsAogICAgc3RkOjpzdHJpbmcgZmMgPSBzdGQ6OnJlZ2V4X3JlcGxhY2UoYywgcGF0dGVybiwgIiQxIik7CgogICAgLy8gJzEn7J2EIOygnOqxsO2VnCDtm4Qg7JWV7LaV65CcIOusuOyekOyXtOydtCDsm5Drs7jrs7Tri6Qg7Ken7Jy866m0IOq3uCDrrLjsnpDsl7TsnYQg67CY7ZmYCiAgICBpZiAoZmMubGVuZ3RoKCkgPCBzLmxlbmd0aCgpKSByZXR1cm4gZmM7CiAgICAKICAgIHJldHVybiBzOyAvLyDsm5Drs7jsnbQg6rCA7J6lIOynp+ycvOuptCDsm5Drs7gg67CY7ZmYCn0KCmludCBtYWluKCkgewogICAgc3RkOjpzdHJpbmcgaW5wdXQ7CiAgICBzdGQ6OmNpbiA+PiBpbnB1dDsKICAgIHN0ZDo6Y291dCA8PCBycihpbnB1dCkgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0K