검사 숫자의 품질
시간 제한1초메모리 제한512 MB
10x10 연산 테이블이 주어질 때, 한 자리 변경이나 인접한 두 자리 교환이 검사 숫자 검사를 통과하는 네 자리 기본 ID의 개수를 센다.
문제
한 도시가 다섯 자리 사회보장번호를 도입한다. 앞의 네 자리는 기본 번호이고 0000부터 9999까지 쓴다. 마지막 한 자리는 잘못 적은 번호를 걸러내는 검사 숫자다.
검사 숫자는 연산표로 계산한다. 연산표는 0부터 9까지의 숫자를 담은 10 x 10 표이고, 대각선 원소는 모두 0이다. 행과 열 번호는 0부터 시작하고, 행 열의 값을 로 쓴다.
기본 번호 의 검사 숫자 는 다음과 같다.
사회보장번호는 다섯 자리 숫자열 다.
연산표 1은 다음과 같다. 맨 왼쪽 열은 행 번호다.
연산표 1로 기본 번호 2016의 검사 숫자를 구하면 다음과 같다.
따라서 사회보장번호는 20166이다.
검사 숫자는 어떤 연산표를 쓰느냐에 따라 달라진다. 행 열에 을 넣은 표를 연산표 2라고 하자. 같은 기본 번호 2016의 검사 숫자는 3이 되고, 사회보장번호는 20163이다.
다섯 자리 숫자열 를 검사하는 함수는 다음과 같다.
올바른 사회보장번호는 를 만족하므로 check 값은 이고, 대각선 원소가 0이라서 결과는 0이다. check 값이 0이 아니면 그 숫자열은 올바른 사회보장번호가 아니다. 반대로 잘못된 숫자열인데도 check 값이 0이 되는 경우가 있고, 어떤 잘못을 걸러내는지는 연산표가 정한다.
도시는 다섯 자리 숫자열에서 자주 생기는 두 가지 잘못을 걸러내려 한다.
- 한 자리를 다른 숫자로 적는 잘못
- 이웃한 두 자리를 서로 바꿔 적는 잘못
두 잘못 모두 기본 번호 네 자리뿐 아니라 검사 숫자 자리에서도 일어난다. 이웃한 두 자리가 같은 숫자면 바꿔 적어도 숫자열이 그대로이므로 잘못으로 세지 않는다. 그래서 기본 번호 하나마다 한 자리를 바꾼 숫자열 45개와, 서로 다른 이웃 자리를 바꾼 숫자열이 생긴다.
이렇게 만든 숫자열 중 하나라도 check 값이 0이면 그 연산표는 해당 기본 번호에서 실패한다. 연산표 1은 어떤 기본 번호에서도 실패하지 않는다. 연산표 2는 3439개의 기본 번호에서 실패한다. 예를 들어 20163의 셋째 자리와 넷째 자리를 바꾼 20613은 check 값이 0이다.
연산표가 주어질 때, 0000부터 9999까지의 기본 번호 중 그 표가 실패하는 것이 몇 개인지 세어라.
입력
열 줄에 걸쳐 연산표가 주어진다. 번째 줄은 표의 행이고, 열 개의 정수 가 공백 하나로 구분되어 있다. 모든 는 0 이상 9 이하이고, 는 0이다.
출력
두 가지 잘못 중 하나 이상을 걸러내지 못하는 기본 번호의 개수를 한 줄에 출력한다.