#include <iostream>
using namespace std;
unsigned inv(unsigned x)
{
unsigned y = x;
y |= y >> 1;
y |= y >> 2;
y |= y >> 4;
y |= y >> 8;
y |= y >> 16;
return x ^ y;
}
int main()
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 255, 256, 317, 402, 7200, 86123456, 1000000000, 1234567897 };
for (unsigned q=0; q < sizeof a / sizeof *a; ++q)
cout << a[q] << ' ' << inv(a[q]) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGludih1bnNpZ25lZCB4KQp7CiAgdW5zaWduZWQgeSA9IHg7CgogIHkgfD0geSA+PiAxOwogIHkgfD0geSA+PiAyOwogIHkgfD0geSA+PiA0OwogIHkgfD0geSA+PiA4OwogIHkgfD0geSA+PiAxNjsKICAKICByZXR1cm4geCBeIHk7Cn0KCmludCBtYWluKCkKewogIGludCBhW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDI1NSwgMjU2LCAzMTcsIDQwMiwgNzIwMCwgODYxMjM0NTYsIDEwMDAwMDAwMDAsIDEyMzQ1Njc4OTcgfTsKICAKICBmb3IgKHVuc2lnbmVkIHE9MDsgcSA8IHNpemVvZiBhIC8gc2l6ZW9mICphOyArK3EpCiAgICBjb3V0IDw8IGFbcV0gPDwgJyAnIDw8IGludihhW3FdKSA8PCBlbmRsOwogIAogIHJldHVybiAwOwp9