체커보드 행렬 (작은 입력)

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

요약
0과 1로 된 2N by 2N 행렬을 행과 열 교환으로 체커보드 형태로 만드는 최소 교환 횟수를 구합니다.
난이도

보통10점 중 5점

유형
행렬, 그리디
정답자
아직 제출이 없습니다

문제

미자는 심심할 때 행렬로 게임을 한다. 한 행렬을 다른 행렬로 바꾸되, 이동 횟수를 가장 적게 쓰는 것이 목표다. 미자에게 이동 한 번은 행렬의 두 행을 서로 바꾸거나 두 열을 서로 바꾸는 것이다.

오늘 미자가 다루는 행렬 MM은 크기가 2N×2N2N \times 2N이고, 각 칸에 0 또는 1이 들어 있다. 미자는 MM을 체커보드 행렬로 바꾸려고 한다. 체커보드 행렬은 모든 행과 모든 열에서 0과 1이 번갈아 나오는 행렬이다. MM을 체커보드 행렬로 만드는 데 필요한 최소 이동 횟수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 정수 NN이 주어진다. 이어지는 2N2N개의 줄에는 각각 2N2N개의 문자가 주어지며, 이 줄들이 MM의 행이다. 각 문자는 0 또는 1이다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤101 \le N \le 10

출력

각 테스트 케이스마다 "Case #x: y" 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 MM을 체커보드 행렬로 만드는 데 필요한 행 교환과 열 교환의 최소 횟수다. 어떤 순서로 이동해도 체커보드 행렬을 만들 수 없으면 y 자리에 IMPOSSIBLE을 출력한다.

힌트

예제의 첫 번째 케이스에서 MM은 이미 체커보드 행렬이다. 두 번째 케이스에서는 1열과 2열을 바꾼 다음 1행과 2행을 바꾸면 체커보드 행렬이 된다. 세 번째 케이스는 1의 개수가 모자라서 어떤 방법으로도 체커보드 행렬을 만들 수 없다.

예제2

  1. 예제 1

    입력
    3
    1
    01
    10
    2
    1001
    0110
    0110
    1001
    1
    00
    00
    
    예상 출력
    Case #1: 0
    Case #2: 2
    Case #3: IMPOSSIBLE
    
  2. 예제 2

    입력
    4
    1
    10
    01
    1
    11
    00
    1
    01
    01
    1
    10
    10
    
    예상 출력
    Case #1: 0
    Case #2: IMPOSSIBLE
    Case #3: IMPOSSIBLE
    Case #4: IMPOSSIBLE