6789

면접 대비

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

요약
각 칸에 6, 7, 8, 9 카드가 놓여 있고, 카드를 돌리면 6과 9가 서로 바뀌고 8과 7은 그대로다. 180도 회전해도 같은 행렬이 되도록 카드를 돌리는 최소 횟수를 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 4점

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

문제

재현이는 숫자를 좋아한다. 10개의 숫자 중에서 6, 7, 8, 9를 가장 좋아한다. 그래서 6, 7, 8, 9로만 이루어진 특별한 카드 세트를 만들었다.

현재 재현이는 N×MN\times M장의 카드를 가지고 있다. 재현이는 NN행 MM열의 마법 같은 카드 행렬을 만들려고 한다. 행렬의 각 행에는 MM장의 카드가 들어가야 한다. 그는 이미 카드를 NN행 MM열 행렬 모양으로 배치해 두었다.

\

그림 1. 초기 상태. 점대칭이 아니다.

마법 행렬이 되려면 행렬이 점대칭이어야 한다. 행렬을 180도 회전했을 때 원래 행렬과 같아야 한다. 예를 들어 8은 자기 자신과 점대칭이고, 6과 9는 서로 점대칭이다.

재현이는 카드의 위치를 바꾸고 싶지 않으므로, 각 카드를 원래 자리에서 돌리기만 해서 행렬을 점대칭으로 만드는 것이 목표이다.

그림 2. 카드 두 장을 돌리자 점대칭이 되었다.

마법 행렬을 만들기 위해 돌려야 하는 카드 수의 최솟값을 구하라.

입력

첫째 줄에 두 정수 NN, MM이 주어진다. (1≤N, M≤5001 \le N,\ M \le 500)

다음 NN개의 줄에는 각 카드에 적힌 숫자를 나타내는 길이 MM의 문자열이 주어진다. 각 문자는 6, 7, 8, 9 중 하나임이 보장된다.

출력

마법 행렬을 만들기 위해 돌려야 하는 카드 수의 최솟값을 첫째 줄에 출력한다. 마법 행렬을 만들 수 없다면 "-1"을 출력한다. (따옴표 제외)

예제3

  1. 예제 1

    입력
    2 3
    676
    679
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 3
    888
    888
    888
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1 1
    7
    
    예상 출력
    -1