아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이상한 비트

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

요약
12비트 레지스터의 초기 값과 목표 값이 주어질 때, 레지스터 내부와 사이의 인접 비트 교환을 최소 횟수로 수행해 목표 상태로 만드는 문제이며, 불가능하면 Impossible을 출력한다.
난이도

어려움10점 중 8점

유형
BFS, 시뮬레이션, 그래프, 비트 연산
정답자
아직 제출이 없습니다

문제

올란디카 사람들은 이상한 컴퓨터를 발명했다. 이 컴퓨터에는 숫자를 저장하는 12비트 레지스터만 있으며, 받아들이는 명령은 SWAP 하나뿐이다. SWAP 함수는 세 개의 인자 ii, jj, dd로 호출된다. swap(i, j, d)는 ii번째 레지스터의 jj번째 비트를 방향 dd(0: 위, 1: 오른쪽, 2: 아래, 3: 왼쪽)에 있는 이웃 비트와 교환한다.

  • 오른쪽(1)과 왼쪽(3)은 같은 레지스터 안에서 이웃한 비트(각각 j+1j+1번째, j−1j-1번째 비트)를 가리킨다.
  • 위(0)와 아래(2)는 같은 비트 위치에서 이웃한 레지스터(각각 i−1i-1번째, i+1i+1번째 레지스터)를 가리킨다.

예를 들어 swap(2, 3, 1)은 2번째 레지스터의 3번째 비트와 4번째 비트를 교환하고, swap(6, 4, 2)는 6번째 레지스터와 7번째 레지스터의 4번째 비트를 교환한다.

올란디카 사람들은 레지스터들의 처음 값을 알고 있으며, 이를 다른 값들로 바꾸고 싶어 한다. 각 레지스터를 원하는 값으로 만들기 위해 필요한 SWAP 호출의 최소 횟수를 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 레지스터의 개수 nn (1≤n≤161 \le n \le 16)이 주어진다. 다음 줄에는 nn개의 정수가 주어지며, ii번째 수는 ii번째 레지스터의 처음 값이다. 그 다음 줄에도 nn개의 정수가 주어지며, ii번째 수는 ii번째 레지스터의 목표 값이다. 각 레지스터 값은 12비트로 표현되는 00 이상 40954095 이하의 정수이다. 입력은 00 하나만 있는 줄로 끝난다.

출력

각 테스트 케이스에 대해, 필요한 SWAP의 최소 횟수를 한 줄에 출력한다. 목표 상태를 만드는 것이 불가능하면 Impossible을 출력한다.

예제3

  1. 예제 1

    입력
    2
    2 3
    6 2
    3
    1 1 1
    2 3 4
    4
    5 2 6 0
    3 2 2 4
    0
    
    예상 출력
    3
    Impossible
    2
    
  2. 예제 2

    입력
    1
    1
    2
    0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    2
    1 0
    0 1
    0
    
    예상 출력
    1