import java.util.Scanner;
import java.util.Arrays;
import java.lang.Math;

public class Main
{
    public static void main(String[] args)
    {
        int num;
        int count;
        test t;
        test eo;
        
        Scanner reader = new Scanner(System.in); // Reading from System.in
        System.out.println("Enter a number no larger than 2,000,000,000: ");
        num = reader.nextInt(); // Scans the next token of the input as an int.
        reader.close();
        System.out.println("\n");
        // THE FUNCTION HAS TO START here
        t= new test(num);
        System.out.println("\n\n***Program will execute until next number found with: " +
        t.countOnes() + " bits set***");
        
        for (int i=1; i<2*num; i++)
        {
            eo=new test(num+i);
            
            if (eo.countOnes()==t.countOnes() && (num+i)>num)
            {
                System.out.println(num + " has " + t.countOnes() + " bits set." );
                System.out.println(num+i + " has " + eo.countOnes() + " bits set." );
                break;
            }
        }
    }
}

class test
{
    int binary[] = new int[31]; //This is to define 31 bit array to hold binary value. Maximum value is over 2 billion.
    // This is Java's limitation.
    int j; //counter
    int i; //counter
    
    String conversion; // this will be used to output binary conversion on screen without having to iterate through loop again
    int num;
    int numberOnes;
    int divisor;
    
    public test(int num)
    {
        System.out.println("\n");
        System.out.println("Decimal number is: " + num); // This is tricky part... Unsure of how to store array of binary conversions.
        int length = binary.length;
        System.out.println("*** This program will convert decimal " + num+ " into binary");
        //Execute a for loop to check modulus (i.e no remainder)
        
        for (j=length-1; j>=0; j--)
        {
            divisor = (int)(Math.pow(2,j));
            
            if (num - divisor >=0)
            {
                binary[(length-1)-j] = 1;
                num=num-divisor;
                numberOnes++;
            }
        }
        conversion = Arrays.toString(binary);
        System.out.println("The binary version is: " + conversion );
        System.out.println("Number bits set: " + countOnes());
    }
    
    int countOnes()
    {
        return numberOnes;
    }
    
    String binaryConversion()
    {
        return conversion;
    }
    
    int valueDivisor()
    {
        return j;
    }
}