#include <iostream>
#include <iomanip>
using namespace std;
unsigned long long magic(unsigned long long x)
{
unsigned long long mask = ~(x & 0x1111111111111111);
mask &= (mask << 1) | 1;
mask &= (mask << 2) | 3;
return x&mask;
}
void test(unsigned long long x)
{
cout << hex << setfill('0') << setw(16) << x << endl;
cout << hex << setfill('0') << setw(16) << magic(x) << endl << endl;
}
int main(int argc, const char * argv[])
{
test(0x12562451ba221630);
test(0x752375de0a221831);
test(0xcfcf24322a221e42);
test(0xffffeeee1a221137);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1bnNpZ25lZCBsb25nIGxvbmcgbWFnaWModW5zaWduZWQgbG9uZyBsb25nIHgpCnsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrID0gfih4ICYgMHgxMTExMTExMTExMTExMTExKTsKICAgIG1hc2sgJj0gKG1hc2sgPDwgMSkgfCAxOwogICAgbWFzayAmPSAobWFzayA8PCAyKSB8IDM7CiAgICByZXR1cm4geCZtYXNrOwp9Cgp2b2lkIHRlc3QodW5zaWduZWQgbG9uZyBsb25nIHgpCnsKICAgIGNvdXQgPDwgaGV4IDw8IHNldGZpbGwoJzAnKSA8PCBzZXR3KDE2KSA8PCB4IDw8IGVuZGw7CiAgICBjb3V0IDw8IGhleCA8PCBzZXRmaWxsKCcwJykgPDwgc2V0dygxNikgPDwgbWFnaWMoeCkgPDwgZW5kbCA8PCBlbmRsOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgdGVzdCgweDEyNTYyNDUxYmEyMjE2MzApOwogICAgdGVzdCgweDc1MjM3NWRlMGEyMjE4MzEpOwogICAgdGVzdCgweGNmY2YyNDMyMmEyMjFlNDIpOwogICAgdGVzdCgweGZmZmZlZWVlMWEyMjExMzcpOwoKfQo=