전구 끄기
시간 제한4초메모리 제한512 MB
N x N 격자의 램프에서 한 칸을 누르면 그 칸과 상하좌우 이웃이 함께 켜지거나 꺼질 때, 모든 램프를 끄는 최소 누름 횟수를 구하고 불가능하면 -1을 출력한다.
문제
홍익이는 N x N 크기의 전구 판을 가지고 있다. 판의 각 칸에는 전구가 하나씩 달려 있고, 각 전구는 켜져 있거나 꺼져 있다. 어떤 칸의 전구를 누르면 그 전구와 상하좌우로 인접한 전구까지 최대 5개의 상태가 한꺼번에 바뀐다. 켜져 있던 전구는 꺼지고, 꺼져 있던 전구는 켜진다. 행은 위에서 아래로 1번부터 N번까지, 열은 왼쪽에서 오른쪽으로 1번부터 N번까지 번호를 매긴다.
<그림 1> 같은 전구 판이 있다고 하자. 0은 전구가 꺼져 있다는 뜻이고, 1은 켜져 있다는 뜻이다.

<그림 1>
<그림 1>에서 회색으로 표시한 (2, 2) 전구를 누르면 판은 <그림 2>처럼 바뀐다.

<그림 2>
다른 예로 <그림 3>에서 (1, 1) 전구를 누르면

<그림 3>
판은 <그림 4>처럼 바뀐다.

<그림 4>
(1, 1)에는 위쪽과 왼쪽에 이웃한 칸이 없다. 그래서 자기 자신과 오른쪽, 아래쪽 전구만 상태가 바뀐다.
누르는 순서는 결과를 바꾸지 않고, 같은 전구를 두 번 누르면 판은 처음 상태로 돌아온다.
홍익이는 판의 전구를 모두 끄고 싶다. 처음 상태가 주어질 때 모든 전구를 끄는 데 필요한 최소 누름 횟수 B를 구하여라. 모두 끄는 방법이 없으면 -1을 출력한다.
입력
첫째 줄에 전구 판의 크기 N이 주어진다.
이어지는 N개의 줄에는 줄마다 0 또는 1이 N개씩 공백으로 구분되어 주어진다. 번째 줄의 번째 수는 칸의 전구가 켜져 있으면 1, 꺼져 있으면 0이다.
출력
모든 전구를 끄는 데 필요한 최소 누름 횟수 B를 한 줄에 출력한다. 모든 전구를 끄는 방법이 없으면 -1을 출력한다.