#include <iostream>
using namespace std;
unsigned char val(char c)
{
if ('0' <= c && c <= '9') { return c - '0'; }
if ('a' <= c && c <= 'f') { return c + 10 - 'a'; }
if ('A' <= c && c <= 'F') { return c + 10 - 'A'; }
throw "Eeek";
}
std::string decode(std::string const & s)
{
if ((s.size() % 2) != 0) { throw "Eeek"; }
std::string result;
result.reserve(s.size() / 2);
for (std::size_t i = 0; i < s.size(); i+=2)
{
unsigned char n = val(s[i]) * 16 + val(s[i + 1]);
result += n;
}
return result;
}
int main ()
{
string hex = "537461636b6f766572666c6f77206973207468652062657374212121";
string decoded;
decoded = decode(hex);
cout << decoded;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnVuc2lnbmVkIGNoYXIgdmFsKGNoYXIgYykKewogICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKSB7IHJldHVybiBjICAgICAgLSAnMCc7IH0KICAgIGlmICgnYScgPD0gYyAmJiBjIDw9ICdmJykgeyByZXR1cm4gYyArIDEwIC0gJ2EnOyB9CiAgICBpZiAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpIHsgcmV0dXJuIGMgKyAxMCAtICdBJzsgfQogICAgdGhyb3cgIkVlZWsiOwp9CiAKc3RkOjpzdHJpbmcgZGVjb2RlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgcykKewogICAgaWYgKChzLnNpemUoKSAlIDIpICE9IDApIHsgdGhyb3cgIkVlZWsiOyB9CiAKICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKICAgIHJlc3VsdC5yZXNlcnZlKHMuc2l6ZSgpIC8gMik7CiAKICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSs9MikKICAgIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIG4gPSB2YWwoc1tpXSkgKiAxNiArIHZhbChzW2kgKyAxXSk7CiAgICAgICAgcmVzdWx0ICs9IG47CiAgICB9CiAKICAgIHJldHVybiByZXN1bHQ7Cn0KIAppbnQgbWFpbiAoKQp7CnN0cmluZyBoZXggPSAiNTM3NDYxNjM2YjZmNzY2NTcyNjY2YzZmNzcyMDY5NzMyMDc0Njg2NTIwNjI2NTczNzQyMTIxMjEiOwpzdHJpbmcgZGVjb2RlZDsKZGVjb2RlZCA9IGRlY29kZShoZXgpOwpjb3V0IDw8IGRlY29kZWQ7Cn0K