만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

정확한 발사

시간 제한5초메모리 제한8 MB

요약
n의 이진 표현에서 비트를 가장 적게 뒤집어 m의 배수를 만들고, 그 최소 횟수로 만들 수 있는 값의 개수와 가장 작은 값을 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 정수론, 비트 연산
정답자
아직 제출이 없습니다

문제

소피아는 세계의 지배권을 빼앗으려 한다. 지금은 중앙 컴퓨터가 지배권을 쥐고 있지만, 이 컴퓨터의 소프트웨어에는 치명적인 버그가 있다. 컴퓨터의 지배를 무너뜨리려면 변수 zz의 값을 mm으로 나누어 떨어지는 정수 아무 것으로나 설정하면 된다.

변수 zz에는 현재 정수 nn이 들어 있으며, 이는 앞자리 0 없이 이진수로 표현되어 있다. 소피아는 지하실에 이온 대포를 만들었다. 대포를 한 번 쏘면 컴퓨터 메모리의 비트 하나를 소피아가 고른 위치에서 뒤집는다. zz를 저장한 레지스터의 어떤 비트든 정확하게 겨냥해 뒤집을 수 있다. 대포는 이진 표현에 이미 있는 비트만 뒤집을 수 있고, 양 끝을 포함해 어디에도 새 비트를 삽입할 수는 없다. 다만 앞쪽의 1은 0으로 뒤집을 수 있다. 소피아는 원하는 만큼 쏠 수 있지만, 쏠 때마다 계획이 들킬 가능성이 커지므로 발사 횟수를 최소로 줄이려 한다.

입력

입력은 한 줄이며, 공백 하나로 구분된 양의 정수 nn과 mm (1≤n,m≤10151 \le n, m \le 10^{15})이 주어진다. nn은 zz의 초기 값이고, mm은 zz의 최종 값이 나누어 떨어져야 하는 수다.

출력

공백으로 구분한 세 개의 수를 표준 출력에 출력한다. 첫째는 컴퓨터의 지배를 무너뜨리는 데 필요한 최소 발사 횟수, 둘째는 그 최소 횟수로 도달할 수 있으면서 mm의 배수인 서로 다른 n′n'의 개수, 셋째는 그러한 n′n' 가운데 가장 작은 값이다.

힌트

첫 번째 예시에서 변수의 값은 11110(2)11110_{(2)}, 즉 30이다. 7의 배수로 만들려면 한 번 쏘면 충분하다. 방법은 두 가지로, 0‾1110(2)=14\underline{0}1110_{(2)} = 14로 바꾸거나 1110‾0(2)=28111\underline{0}0_{(2)} = 28로 바꾸면 된다. 첫 번째 값이 최솟값이다.

두 번째 예시에서 변수의 값은 69=1000101(2)69 = 1000101_{(2)}이다. 41의 배수로 만드는 유일한 방법은 0=0‾0000‾00‾(2)0 = \underline{0}000\underline{0}0\underline{0}_{(2)}로 바꾸는 것이며, 이때 3번 쏘아야 한다.

예제2

  1. 예제 1

    입력
    30 7
    
    예상 출력
    1 2 14
    
  2. 예제 2

    입력
    69 41
    
    예상 출력
    3 1 0