검사 숫자의 품질

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

요약
10x10 연산 테이블이 주어질 때, 한 자리 변경이나 인접한 두 자리 교환이 검사 숫자 검사를 통과하는 네 자리 기본 ID의 개수를 센다.
난이도

쉬움10점 중 3점

유형
구현, 완전 탐색, 시뮬레이션
정답자
아직 제출이 없습니다

문제

한 도시가 다섯 자리 사회보장번호를 도입한다. 앞의 네 자리는 기본 번호이고 0000부터 9999까지 쓴다. 마지막 한 자리는 잘못 적은 번호를 걸러내는 검사 숫자다.

검사 숫자는 연산표로 계산한다. 연산표는 0부터 9까지의 숫자를 담은 10 x 10 표이고, 대각선 원소는 모두 0이다. 행과 열 번호는 0부터 시작하고, ii 행 jj 열의 값을 i⊗ji \otimes j 로 쓴다.

기본 번호 abcdabcd 의 검사 숫자 ee 는 다음과 같다.

e=(((0⊗a)⊗b)⊗c)⊗de = (((0 \otimes a) \otimes b) \otimes c) \otimes d

사회보장번호는 다섯 자리 숫자열 abcdeabcde 다.

연산표 1은 다음과 같다. 맨 왼쪽 열은 행 번호다.

행0123456789
00317598642
17092154863
24206871359
31750983426
46123045978
53674209581
65869720134
78945362017
89438617205
92581436790

연산표 1로 기본 번호 2016의 검사 숫자를 구하면 다음과 같다.

e=(((0⊗2)⊗0)⊗1)⊗6=((1⊗0)⊗1)⊗6=(7⊗1)⊗6=9⊗6=6e = (((0 \otimes 2) \otimes 0) \otimes 1) \otimes 6 = ((1 \otimes 0) \otimes 1) \otimes 6 = (7 \otimes 1) \otimes 6 = 9 \otimes 6 = 6

따라서 사회보장번호는 20166이다.

검사 숫자는 어떤 연산표를 쓰느냐에 따라 달라진다. ii 행 jj 열에 (j−i) mod 10(j - i) \bmod 10 을 넣은 표를 연산표 2라고 하자. 같은 기본 번호 2016의 검사 숫자는 3이 되고, 사회보장번호는 20163이다.

다섯 자리 숫자열 abcdeabcde 를 검사하는 함수는 다음과 같다.

check(abcde)=((((0⊗a)⊗b)⊗c)⊗d)⊗e\mathrm{check}(abcde) = ((((0 \otimes a) \otimes b) \otimes c) \otimes d) \otimes e

올바른 사회보장번호는 e=(((0⊗a)⊗b)⊗c)⊗de = (((0 \otimes a) \otimes b) \otimes c) \otimes d 를 만족하므로 check 값은 e⊗ee \otimes e 이고, 대각선 원소가 0이라서 결과는 0이다. check 값이 0이 아니면 그 숫자열은 올바른 사회보장번호가 아니다. 반대로 잘못된 숫자열인데도 check 값이 0이 되는 경우가 있고, 어떤 잘못을 걸러내는지는 연산표가 정한다.

도시는 다섯 자리 숫자열에서 자주 생기는 두 가지 잘못을 걸러내려 한다.

  • 한 자리를 다른 숫자로 적는 잘못
  • 이웃한 두 자리를 서로 바꿔 적는 잘못

두 잘못 모두 기본 번호 네 자리뿐 아니라 검사 숫자 자리에서도 일어난다. 이웃한 두 자리가 같은 숫자면 바꿔 적어도 숫자열이 그대로이므로 잘못으로 세지 않는다. 그래서 기본 번호 하나마다 한 자리를 바꾼 숫자열 45개와, 서로 다른 이웃 자리를 바꾼 숫자열이 생긴다.

이렇게 만든 숫자열 중 하나라도 check 값이 0이면 그 연산표는 해당 기본 번호에서 실패한다. 연산표 1은 어떤 기본 번호에서도 실패하지 않는다. 연산표 2는 3439개의 기본 번호에서 실패한다. 예를 들어 20163의 셋째 자리와 넷째 자리를 바꾼 20613은 check 값이 0이다.

연산표가 주어질 때, 0000부터 9999까지의 기본 번호 중 그 표가 실패하는 것이 몇 개인지 세어라.

입력

열 줄에 걸쳐 연산표가 주어진다. ii 번째 줄은 표의 ii 행이고, 열 개의 정수 xi0,xi1,…,xi9x_{i0}, x_{i1}, \ldots, x_{i9} 가 공백 하나로 구분되어 있다. 모든 xijx_{ij} 는 0 이상 9 이하이고, xiix_{ii} 는 0이다.

출력

두 가지 잘못 중 하나 이상을 걸러내지 못하는 기본 번호의 개수를 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    0 3 1 7 5 9 8 6 4 2
    7 0 9 2 1 5 4 8 6 3
    4 2 0 6 8 7 1 3 5 9
    1 7 5 0 9 8 3 4 2 6
    6 1 2 3 0 4 5 9 7 8
    3 6 7 4 2 0 9 5 8 1
    5 8 6 9 7 2 0 1 3 4
    8 9 4 5 3 6 2 0 1 7
    9 4 3 8 6 1 7 2 0 5
    2 5 8 1 4 3 6 7 9 0
    
    예상 출력
    0
    
  2. 예제 2

    입력
    0 1 2 3 4 5 6 7 8 9
    9 0 1 2 3 4 5 6 7 8
    8 9 0 1 2 3 4 5 6 7
    7 8 9 0 1 2 3 4 5 6
    6 7 8 9 0 1 2 3 4 5
    5 6 7 8 9 0 1 2 3 4
    4 5 6 7 8 9 0 1 2 3
    3 4 5 6 7 8 9 0 1 2
    2 3 4 5 6 7 8 9 0 1
    1 2 3 4 5 6 7 8 9 0
    
    예상 출력
    3439
    
  3. 예제 3

    입력
    0 9 8 7 6 5 4 3 2 1
    1 0 9 8 7 6 5 4 3 2
    2 1 0 9 8 7 6 5 4 3
    3 2 1 0 9 8 7 6 5 4
    4 3 2 1 0 9 8 7 6 5
    5 4 3 2 1 0 9 8 7 6
    6 5 4 3 2 1 0 9 8 7
    7 6 5 4 3 2 1 0 9 8
    8 7 6 5 4 3 2 1 0 9
    9 8 7 6 5 4 3 2 1 0
    
    예상 출력
    9995
    
  4. 예제 4

    입력
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0
    
    예상 출력
    10000