정확한 발사
시간 제한5초메모리 제한8 MB
n의 이진 표현에서 비트를 가장 적게 뒤집어 m의 배수를 만들고, 그 최소 횟수로 만들 수 있는 값의 개수와 가장 작은 값을 구합니다.
문제
소피아는 세계의 지배권을 빼앗으려 한다. 지금은 중앙 컴퓨터가 지배권을 쥐고 있지만, 이 컴퓨터의 소프트웨어에는 치명적인 버그가 있다. 컴퓨터의 지배를 무너뜨리려면 변수 의 값을 으로 나누어 떨어지는 정수 아무 것으로나 설정하면 된다.
변수 에는 현재 정수 이 들어 있으며, 이는 앞자리 0 없이 이진수로 표현되어 있다. 소피아는 지하실에 이온 대포를 만들었다. 대포를 한 번 쏘면 컴퓨터 메모리의 비트 하나를 소피아가 고른 위치에서 뒤집는다. 를 저장한 레지스터의 어떤 비트든 정확하게 겨냥해 뒤집을 수 있다. 대포는 이진 표현에 이미 있는 비트만 뒤집을 수 있고, 양 끝을 포함해 어디에도 새 비트를 삽입할 수는 없다. 다만 앞쪽의 1은 0으로 뒤집을 수 있다. 소피아는 원하는 만큼 쏠 수 있지만, 쏠 때마다 계획이 들킬 가능성이 커지므로 발사 횟수를 최소로 줄이려 한다.
입력
입력은 한 줄이며, 공백 하나로 구분된 양의 정수 과 ()이 주어진다. 은 의 초기 값이고, 은 의 최종 값이 나누어 떨어져야 하는 수다.
출력
공백으로 구분한 세 개의 수를 표준 출력에 출력한다. 첫째는 컴퓨터의 지배를 무너뜨리는 데 필요한 최소 발사 횟수, 둘째는 그 최소 횟수로 도달할 수 있으면서 의 배수인 서로 다른 의 개수, 셋째는 그러한 가운데 가장 작은 값이다.
힌트
첫 번째 예시에서 변수의 값은 , 즉 30이다. 7의 배수로 만들려면 한 번 쏘면 충분하다. 방법은 두 가지로, 로 바꾸거나 로 바꾸면 된다. 첫 번째 값이 최솟값이다.
두 번째 예시에서 변수의 값은 이다. 41의 배수로 만드는 유일한 방법은 로 바꾸는 것이며, 이때 3번 쏘아야 한다.