#include <iostream>
using namespace std;
unsigned int bitwiseor(unsigned int a, unsigned int b){
if (a==b)
return a;
unsigned final = 0;
unsigned rev = 0;
while(b){
final*=2;
if (a%2==1 || a!=b)
final++;
a/=2;
b/=2;
}
while(final){
rev *= 2;
rev += final % 2;
final/=2;
}
return rev;
}
int dumb(int a, int b)
{
int z=0;
while(a<=b) z|=a++;
return z;
}
int main(int argc, char *argv[])
{
int a,b;
for(a=0;a<1000;a++) {
for(b=a;b<1000;b++) {
int z1=dumb(a,b);
int z2=bitwiseor(a,b);
if(z1!=z2) {
printf("fail %d %d %d %d\n",a,b,z1,z2);
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnVuc2lnbmVkIGludCBiaXR3aXNlb3IodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKXsKCWlmIChhPT1iKQoJCXJldHVybiBhOwoJdW5zaWduZWQgZmluYWwgPSAwOwoJdW5zaWduZWQgcmV2ID0gMDsKCXdoaWxlKGIpewoJCWZpbmFsKj0yOwoJCWlmIChhJTI9PTEgfHwgYSE9YikKCQkJZmluYWwrKzsKCQlhLz0yOwoJCWIvPTI7Cgl9Cgl3aGlsZShmaW5hbCl7CgkJcmV2ICo9IDI7CgkJcmV2ICs9IGZpbmFsICUgMjsKCQlmaW5hbC89MjsKCX0KCXJldHVybiByZXY7Cn0KCmludCBkdW1iKGludCBhLCBpbnQgYikKewogICBpbnQgej0wOwoKICAgd2hpbGUoYTw9Yikgenw9YSsrOwogICByZXR1cm4gejsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICBpbnQgYSxiOwogICBmb3IoYT0wO2E8MTAwMDthKyspIHsKICAgICAgZm9yKGI9YTtiPDEwMDA7YisrKSB7CiAgICAgICAgIGludCB6MT1kdW1iKGEsYik7CiAgICAgICAgIGludCB6Mj1iaXR3aXNlb3IoYSxiKTsKICAgICAgICAgaWYoejEhPXoyKSB7CiAgICAgICAgICAgIHByaW50ZigiZmFpbCAlZCAlZCAlZCAlZFxuIixhLGIsejEsejIpOwogICAgICAgICB9CiAgICAgIH0KICAgfQogICByZXR1cm4gMDsKfQ==