페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#10403

두 배 또는 NOT 10s 1024MB

문제

시작값인 0 이상의 정수 \mathbf{S}와 목표값인 0 이상의 정수 \mathbf{E}가 주어진다. \mathbf{S}\mathbf{E}는 모두 이진수 표현(즉, 2진법 표기)으로 주어진다. 목표는 \mathbf{S}\mathbf{E}로 변환하는 것이다. 사용할 수 있는 연산은 다음 두 가지뿐이다:

  • 현재 값을 2배로 만든다.
  • 현재 값에 비트 단위 NOT(bitwise NOT)을 취한다. 현재 값의 이진수 표현은 불필요한 앞자리 0을 제거한 형태로 취하며, 연산 결과로 생긴 불필요한 앞자리 0도 모두 제거한다. (필요한 앞자리 0은 0의 표현에 있는 것 하나뿐이다.)

예를 들어 2배 연산을 하면 612가 되고, 00이 되며, 1020이 된다. NOT 연산을 하면 01이 되고, 10이 되며, 3 = 11_20이 된다. 또한 14=1110_21이 되고, 10=1010_25=101_2가 되며, 5=101_22=10_2가 된다. (X_2는 이진수 표현이 X인 정수를 뜻한다.)

두 연산은 원하는 만큼, 원하는 순서로 사용할 수 있다. 예를 들어 \mathbf{S} = 10001_2\mathbf{E} = 111_2로 바꾸려면, NOT 연산을 먼저 한 뒤 2배 연산을 두 번 하고 마지막으로 다시 NOT 연산을 하면 된다: 10001_2 \overset{\text{NOT}}{\Longrightarrow} 1110_2 \overset{\times 2}{\Longrightarrow} 11100_2 \overset{\times 2}{\Longrightarrow} 111000_2 \overset{\text{NOT}}{\Longrightarrow} 111_2.

변환을 완료하는 데 필요한 연산 횟수의 최솟값을 구하라. 만약 불가능하다면 불가능하다고 출력하라.


입력

입력의 첫 줄에는 테스트 케이스 수 \mathbf{T}가 주어진다. \mathbf{T}개의 테스트 케이스가 이어진다. 각 테스트 케이스는 문자열 두 개 \mathbf{S}, \mathbf{E}가 주어진 한 줄로 이루어져 있으며, 이는 각각 시작 정수와 목표 정수의 이진수 표현이다.


출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력하라. 여기서 x는 (1부터 시작하는) 테스트 케이스 번호이고, 두 연산만 사용해 \mathbf{S}\mathbf{E}로 바꾸는 방법이 없다면 yIMPOSSIBLE이다. 그렇지 않다면 y는 필요한 연산 횟수의 최솟값이다.


예제

6
10001 111
1011 111
1010 1011
0 1
0 101
1101011 1101011
Case #1: 4
Case #2: 3
Case #3: 2
Case #4: 1
Case #5: IMPOSSIBLE
Case #6: 0
샘플 케이스 #1은 문제 본문에 나온 예시이다. 샘플 케이스 #2, #3, #4에 대한 가능한 최적 해는 각각 다음과 같다: 1011_2 \overset{\text{NOT}}{\Longrightarrow} 100_2 \overset{\times 2}{\Longrightarrow} 1000_2 \overset{\text{NOT}}{\Longrightarrow} 111_2, 1010_2 \overset{\times 2}{\Longrightarrow} 10100_2 \overset{\text{NOT}}{\Longrightarrow} 1011_2, \text{ 그리고} 0_2 \overset{\text{NOT}}{\Longrightarrow} 1_2. 샘플 케이스 #5에서는 어떤 연산 순서를 사용해도 0_2에서 101_2로 갈 수 없다. 샘플 케이스 #6에서는 \mathbf{S} = \mathbf{E}이므로 연산이 필요 없다.

출처

GCJ 2021r1c C

로그인해야 코드를 작성할 수 있어요.