프뤼프줌메
시간 제한2초메모리 제한256 MB
주어진 n과 m에 대해 한 자리 변경이나 인접한 서로 다른 두 수의 교환을 모두 검출하는 검사합 행렬 p와 q를 만들고, 없으면 그 사실을 출력합니다.
입력과 문제
우리 주변에는 은행 계좌 번호, 도서 ISBN, 상품 바코드처럼 긴 숫자 식별자가 많다. 이런 식별자는 사람이 직접 적거나 입력하는 경우가 많아서, 실수를 막으려고 오류 검출 기능이 내장되어 있는 경우가 많다.
오류 검출은 보통 체크섬의 형태로 이루어진다. 예를 들어 ISBN-10 코드는 다음 체크섬을 가지는 10자리 숫자열 이다.
체크섬은 0부터 10 사이의 수이며, 올바른 도서 코드에서는 항상 0이다. 이 체크섬은 오류 검출을 위해 설계되었고 다음 두 성질을 가진다.
- 한 자리 숫자만 바꾸고 나머지는 그대로 두면 체크섬이 달라진다.
- 서로 다른 인접한 두 자리 숫자를 맞바꾸고 나머지는 그대로 두면 체크섬이 달라진다.
다만 체크섬은 11가지 값을 가질 수 있는 반면 각 자리 숫자는 10가지 값만 가지므로, 다소 과하다고 볼 수 있다.
우리는 다음과 같이 아름다운 체크섬을 정의한다. 식별자는 각 값이 0 이상 이하인 정수 개로 이루어진 수열 이다. 체크섬 알고리즘은 두 행렬 ()와 (, )로 정해지며, 두 행렬의 모든 값은 0 이상 이하이다. 체크섬은 다음 순서로 계산한다.
- 으로 둔다.
- 를 1부터 까지 증가시키며 다음을 수행한다.
- 로 둔다.
- 로 둔다.
- 을 체크섬으로 반환한다.
즉, 행렬 는 각 위치마다 수를 변환하고, 행렬 는 변환된 수들을 결합하는 규칙을 정한다. 주어진 과 에 대해 두 행렬 와 가 임의의 수열 마다 위의 두 성질을 만족하는 체크섬을 이루면, 이를 아름다운 체크섬이라고 한다. 즉 하나의 수를 바꾸면 체크섬이 바뀌어야 하고, 서로 다른 인접한 두 수(인 어떤 가 존재한다)를 맞바꾸어도 체크섬이 바뀌어야 한다.
예를 들어 , 로 정의한 ISBN-10 방식은 , 일 때 아름다운 체크섬이다.
주어진 과 에 대해 아름다운 체크섬을 만들 수 있는지 구하시오.
출력
아름다운 체크섬이 존재하면 첫 줄에 Ja를 출력한다. 존재하지 않으면 Nein을 출력한다.
Ja를 출력한 경우, 체크섬의 내용을 이어서 출력한다. 다음 줄에는 행렬 를 출력한다. 각 줄에는 개의 정수를 공백으로 구분하여 쓴다. 번째 줄(0부터 시작)의 번째(0부터 시작) 값이 이다. 그 다음 줄에는 행렬 를 출력한다. 각 줄에는 개의 정수를 공백으로 구분하여 쓴다. 번째 줄(1부터 시작)의 번째(0부터 시작) 값이 이다.
출력하는 모든 수는 0 이상 이하여야 한다. 해가 여러 개이면 아무거나 출력해도 된다.