비트 개수 (Small)

N을 음이 아닌 두 정수 a와 b의 합으로 나누어 a와 b의 이진수에 들어 있는 1의 개수 합이 가장 커지는 값을 구합니다.

보통5비트 연산동적 계획법아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

f(x)f(x)xx를 2진법으로 나타냈을 때 나오는 1의 개수를 돌려주는 함수라고 하자. 예를 들어 5는 2진법으로 101(2)101_{(2)}이므로 f(5)=2f(5) = 2이다.

양의 정수 NN이 주어진다. a+b=Na + b = N을 만족하는 0 이상의 정수 쌍 (a,b)(a, b) 가운데 f(a)+f(b)f(a) + f(b)가 최대가 되는 쌍을 찾고, 그때의 f(a)+f(b)f(a) + f(b) 값을 출력하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 이어지는 TT개의 줄에는 각각 NN이 하나씩 주어진다.

제약

  • 1T10001 \le T \le 1000
  • 1N10181 \le N \le 10^{18}

출력

각 테스트 케이스마다 다음 형식으로 한 줄씩 출력한다.

Case #X: P

XX는 1부터 시작하는 테스트 케이스 번호이고, PPf(a)+f(b)f(a) + f(b)의 최댓값이다.