#include <limits>
#include <iostream>
using U = unsigned char;
constexpr U mul(U a, U b) {
U prod = 0;
while (a) {
if (a & 1) prod += b;
a >>= 1;
b <<= 1;
}
return prod;
}
int main() {
const U max = std::numeric_limits<U>::max(),
min = std::numeric_limits<U>::min();
if (mul(max, max) != U(max * max))
std::cout << (int)max << ": " << mul(max, max) << ' ' << U(max*max) << '\n';
for (U a = min; a < max; ++a)
for (U b = min; b < max; ++b)
if(mul(a, b) != U(a*b))
std::cout << (int)a << ' ' << (int)b << ": " << mul(a,b) << ' ' << U(a*b) << '\n';
}
I2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgVSA9IHVuc2lnbmVkIGNoYXI7Cgpjb25zdGV4cHIgVSBtdWwoVSBhLCBVIGIpIHsKICBVIHByb2QgPSAwOwogIHdoaWxlIChhKSB7CiAgICBpZiAoYSAmIDEpIHByb2QgKz0gYjsKICAgIGEgPj49IDE7CiAgICBiIDw8PSAxOwogIH0KICByZXR1cm4gcHJvZDsKfQoKaW50IG1haW4oKSB7Cgljb25zdCBVIG1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VT46Om1heCgpLCAKICAgICAgbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxVPjo6bWluKCk7CiAgICBpZiAobXVsKG1heCwgbWF4KSAhPSBVKG1heCAqIG1heCkpCiAgICAgICBzdGQ6OmNvdXQgPDwgKGludCltYXggPDwgIjogIiA8PCBtdWwobWF4LCBtYXgpIDw8ICcgJyA8PCBVKG1heCptYXgpIDw8ICdcbic7Cglmb3IgKFUgYSA9IG1pbjsgYSA8IG1heDsgKythKQogICAgCWZvciAoVSBiID0gbWluOyBiIDwgbWF4OyArK2IpCgkJCWlmKG11bChhLCBiKSAhPSBVKGEqYikpCiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgKGludClhIDw8ICcgJyA8PCAoaW50KWIgPDwgIjogIiA8PCBtdWwoYSxiKSA8PCAnICcgPDwgVShhKmIpIDw8ICdcbic7Cn0=