#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
#include <cassert>
using namespace std;
typedef pair<char, uint8_t> RunLength;
vector<RunLength> runLengthEncode(const string& s) {
if(s == "") return {};
vector<RunLength> res;
size_t i = 0, nextPos;
while(s.npos != (nextPos = s.find_first_not_of(s[i], i + 1)) ) {
auto diff = nextPos - i;
assert(diff <= 255);
res.push_back( {s[i], diff} );
i = nextPos;
}
res.push_back( {s[i], s.size() - i} );
return res;
}
string runLengthDecode(const vector<RunLength>& encoding) {
string res;
auto addFun = [&res](const RunLength& rl) {
res += string(rl.second, rl.first);
};
for_each(encoding.begin(), encoding.end(), addFun);
return res;
}
int main() {
cout << runLengthDecode(runLengthEncode("All your base are belong to us!")) << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHBhaXI8Y2hhciwgdWludDhfdD4gUnVuTGVuZ3RoOwoKdmVjdG9yPFJ1bkxlbmd0aD4gcnVuTGVuZ3RoRW5jb2RlKGNvbnN0IHN0cmluZyYgcykgewoJaWYocyA9PSAiIikgcmV0dXJuIHt9OwoJdmVjdG9yPFJ1bkxlbmd0aD4gcmVzOwoKCXNpemVfdCBpID0gMCwgbmV4dFBvczsKCXdoaWxlKHMubnBvcyAhPSAobmV4dFBvcyA9IHMuZmluZF9maXJzdF9ub3Rfb2Yoc1tpXSwgaSArIDEpKSApIHsKCQlhdXRvIGRpZmYgPSBuZXh0UG9zIC0gaTsKCQlhc3NlcnQoZGlmZiA8PSAyNTUpOwoJCXJlcy5wdXNoX2JhY2soIHtzW2ldLCBkaWZmfSApOwoJCWkgPSBuZXh0UG9zOwoJfQoJcmVzLnB1c2hfYmFjaygge3NbaV0sIHMuc2l6ZSgpIC0gaX0gKTsgCglyZXR1cm4gcmVzOwp9CgpzdHJpbmcgcnVuTGVuZ3RoRGVjb2RlKGNvbnN0IHZlY3RvcjxSdW5MZW5ndGg+JiBlbmNvZGluZykgewoJc3RyaW5nIHJlczsKCWF1dG8gYWRkRnVuID0gWyZyZXNdKGNvbnN0IFJ1bkxlbmd0aCYgcmwpIHsgCgkJcmVzICs9IHN0cmluZyhybC5zZWNvbmQsIHJsLmZpcnN0KTsKCX07Cglmb3JfZWFjaChlbmNvZGluZy5iZWdpbigpLCBlbmNvZGluZy5lbmQoKSwgYWRkRnVuKTsKCXJldHVybiByZXM7Cn0KCmludCBtYWluKCkgewoJY291dCA8PCBydW5MZW5ndGhEZWNvZGUocnVuTGVuZ3RoRW5jb2RlKCJBbGwgeW91ciBiYXNlIGFyZSBiZWxvbmcgdG8gdXMhIikpIDw8ICJcbiI7Cn0=