3 곱하기 3 칸씩 뒤집을 수 있기 때문에 2중 for문을 통해서 [0][0]부터 순서대로 행렬이 다를 경우 뒤집는 걸 반복하다 보면 왼쪽 위부터 순서대로 다른 것들만 뒤집기 했기 때문에 이미 뒤집어서 같게 바꿔줬던 건 바뀔 일이 없어서 두 행렬이 같아지는 결과를 얻을 수 있다. 하지만 결과가 다를 경우 -1을 출력해주면 된다.
단, for 문으로 탐색할 때는 그 좌표가 가장 왼쪽 위라고 생각하고 3 곱하기 3이 확보될 때만 뒤집는다.
n, m = map(int, input().split())
listA = []
for _ in range(n): # 리스트A 선언
listA.append(list(map(int, list(input()))))
listB = []
for _ in range(n): # 리스트B 선언
listB.append(list(map(int, list(input()))))
def check(i, j): # 뒤집기 함수
for x in range(i, i+3):
for y in range(j, j+3):
if listA[x][y] == 0:
listA[x][y] = 1
else:
listA[x][y] = 0
cnt = 0 # 카운트
if (n < 3 or m < 3) and listA != listB:
# 예외 1, 리스트가 작을 때
cnt = -1
else:
for r in range(n-2):
for c in range(m-2):
if listA[r][c] != listB[r][c]:
cnt += 1
check(r, c)
if cnt != -1:
if listA != listB: # A와 B가 같은지 확인
cnt = -1
print(cnt)