#include <iostream>
#include <string>
template<int base>
std::string funkyadd(std::string a, std::string b)
{
if (a.size() < b.size()) return funkyadd<base>(b, a);
for ( int i = a.size() - 1, c = 0, d = a.size() - b.size(); (i >= 0) || c; i--)
!((i < 0) && c && a.insert(0, "1").empty()) && (c = (a[i] += ((i >= d) ? b[i - d] - '0' : 0) + c) > ('/' + base)) && (a[i] -= base);
return a;
}
int main()
{
std::cout << funkyadd<2>("101101001001010", "101010101101010") << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdGVtcGxhdGU8aW50IGJhc2U+CnN0ZDo6c3RyaW5nIGZ1bmt5YWRkKHN0ZDo6c3RyaW5nIGEsIHN0ZDo6c3RyaW5nIGIpCnsKCWlmIChhLnNpemUoKSA8IGIuc2l6ZSgpKSByZXR1cm4gZnVua3lhZGQ8YmFzZT4oYiwgYSk7CgoJZm9yICggaW50IGkgPSBhLnNpemUoKSAtIDEsIGMgPSAwLCBkID0gYS5zaXplKCkgLSBiLnNpemUoKTsgKGkgPj0gMCkgfHwgYzsgaS0tKQoJCSEoKGkgPCAwKSAmJiBjICYmIGEuaW5zZXJ0KDAsICIxIikuZW1wdHkoKSkgJiYgKGMgPSAoYVtpXSArPSAoKGkgPj0gZCkgPyBiW2kgLSBkXSAtICcwJyA6IDApICsgYykgPiAoJy8nICsgYmFzZSkpICAmJiAoYVtpXSAtPSBiYXNlKTsKCglyZXR1cm4gYTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OmNvdXQgPDwgZnVua3lhZGQ8Mj4oIjEwMTEwMTAwMTAwMTAxMCIsICIxMDEwMTAxMDExMDEwMTAiKSA8PCBzdGQ6OmVuZGw7Cn0=