비밀번호
시간 제한1초메모리 제한128 MB
정수 A가 주어질 때 같은 개수의 1비트를 가지는 A보다 작은 가장 큰 수와 A보다 큰 가장 작은 수를 비트 조작으로 구하고, 없으면 0을 출력합니다.
문제
어떤 보안 회사는 하나의 양의 정수 A에서 비밀번호에 사용할 두 정수를 만들려고 한다.
먼저 A를 이진수로 나타냈을 때 포함된 1의 개수를 x라고 하자. 다음 두 정수를 찾아야 한다.
A보다 작고, 이진수에 포함된1의 개수가x개이며,A에 가장 가까운 정수A보다 크고, 이진수에 포함된1의 개수가x개이며,A에 가장 가까운 정수
두 정수를 찾아 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 양의 정수 A가 주어진다.
1 <= A <= 10^18
출력
A보다 작은 정수 중 조건을 만족하는 가장 가까운 정수와, A보다 큰 정수 중 조건을 만족하는 가장 가까운 정수를 한 줄에 공백으로 구분하여 출력한다.
어느 한쪽에 조건을 만족하는 정수가 존재하지 않으면, 그 위치에는 0을 출력한다.