비밀번호

시간 제한1초메모리 제한128 MB

요약
정수 A가 주어질 때 같은 개수의 1비트를 가지는 A보다 작은 가장 큰 수와 A보다 큰 가장 작은 수를 비트 조작으로 구하고, 없으면 0을 출력합니다.
난이도

보통10점 중 4점

유형
비트 연산, 수학, 그리디
정답자
아직 제출이 없습니다

문제

어떤 보안 회사는 하나의 양의 정수 A에서 비밀번호에 사용할 두 정수를 만들려고 한다.

먼저 A를 이진수로 나타냈을 때 포함된 1의 개수를 x라고 하자. 다음 두 정수를 찾아야 한다.

  1. A보다 작고, 이진수에 포함된 1의 개수가 x개이며, A에 가장 가까운 정수
  2. A보다 크고, 이진수에 포함된 1의 개수가 x개이며, A에 가장 가까운 정수

두 정수를 찾아 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 양의 정수 A가 주어진다.

1 <= A <= 10^18

출력

A보다 작은 정수 중 조건을 만족하는 가장 가까운 정수와, A보다 큰 정수 중 조건을 만족하는 가장 가까운 정수를 한 줄에 공백으로 구분하여 출력한다.

어느 한쪽에 조건을 만족하는 정수가 존재하지 않으면, 그 위치에는 0을 출력한다.

예제2

  1. 예제 1

    입력
    43
    
    예상 출력
    39 45
    
  2. 예제 2

    입력
    7
    
    예상 출력
    0 11