#include <vector>
class CloseNumber {
public:
vector<int> getCloseNumber(int x) {
// write code here
int c0=0, c1=0;
int c= x;
//find the first "01"
while((c &1) == 0 && c!=0){
c = c>>1;
++c0;
}
while (c&1) {
c= c>>1;
++c1;
}
int p = c0+c1;
if(p == 31 || p ==0){
return {-1,-1};
}
std::cout<< c0 <<" - " << c1<<std::endl;
//next larger
int next_larger = x | ( 1<< p);
next_larger &= ~( (1<< p) -1 ) ;
next_larger |= ((1<< (c1-1)) -1);
//find the firt "10"
c0=0;
c1=0;
c=x;
while (c&1) {
++c0;
c = c>>1;
}
while ((c&1) ==0 && c!=0){
++c1;
c = c>>1;
}
p = c0+c1;
if(p == 31 || p ==0){
return {-1,-1};
}
int next_smaller = x & (~0 <<(p+1));
next_smaller |= ((1 << (c0+1) ) -1) << (c1-1);
return {next_smaller, next_larger};
}
};