바이너리 행렬

아직 제출이 없습니다시간 제한5초메모리 제한128 MB

문제

크기가 $r \times c$인 행렬이 주어진다. 행렬의 각 원소는 $0$ 또는 $1$이다. 한 번의 연산으로 원소 하나를 뒤집을 수 있다. 즉, $0$은 $1$로, $1$은 $0$으로 바꾼다. 이 연산을 여러 번 수행하여 다음 두 조건을 모두 만족하는 행렬을 만들려고 한다.

  1. 모든 행에 들어 있는 $1$의 개수가 서로 같다.
  2. 모든 열에 들어 있는 $1$의 개수가 서로 같다.

주어진 행렬을 위 두 조건을 만족하는 행렬로 바꾸는 데 필요한 연산의 최소 횟수를 구하여라.

입력

첫째 줄에 테스트 케이스의 개수 $T$ ($T \le 1000$)가 주어진다.

각 테스트 케이스의 첫째 줄에는 두 정수 $r$과 $c$ ($1 \le r, c \le 40$)가 주어진다. $r$은 행의 수, $c$는 열의 수이다. 이어지는 $r$개의 줄에는 각각 $c$개의 숫자가 공백 없이 주어지며, 이는 행렬의 각 원소를 나타낸다.

출력

각 테스트 케이스마다 Case #: R 형식으로 한 줄에 출력한다. 여기서 #는 테스트 케이스의 번호($1$부터 시작)이고, R은 주어진 행렬을 조건에 맞는 행렬로 바꾸는 데 필요한 연산의 최소 횟수이다. 바꾸는 것이 불가능한 경우에는 R 대신 $-1$을 출력한다.