Studschiffret
시간 제한1초메모리 제한1024 MB
대각선으로 이동하며 벽에 부딪히면 반사되고 이미 채워진 칸은 건너뛰는 빔을 N×M 격자에서 시뮬레이션해, 행 단위 암호문에서 원래 평문을 복원한다.
문제
Fretchif는 아무도 풀 수 없는 혁신적인 암호를 만들어 냈다! 방식은 다음과 같다. 암호화할 문자열 하나와 두 정수 , 을 고른다. 그다음 개의 행과 개의 열로 이루어진 격자를 그린다. 이제 암호화할 문자열을 한 글자씩 왼쪽 위 모서리에서 오른쪽 아래 대각선 방향으로 써 나간다. 열을 왼쪽에서 오른쪽으로 부터 까지, 행을 위에서 아래로 부터 까지 번호를 매기면 첫 번째 글자는 , 두 번째 글자는 , 세 번째 글자는 과 같은 위치에 놓인다. 격자의 벽에 닿으면 "글자 광선"이 벽에서 반사된다(힌트의 예시를 참고). 이미 글자가 적혀 있는 칸에 도달하면, 쓰려던 글자를 그다음으로 도달하는 빈칸에 대신 쓴다. 암호화할 문자열의 모든 글자를 다 썼으면 격자를 행 단위로 읽어 암호문을 얻는다.
Fretchif가 studschiffret로 암호화한 메시지와 사용한 격자의 크기가 주어질 때, 원래 메시지를 출력하시오.
어떤 메시지는 특정 격자 크기로는 암호화할 수 없다. 새 빈칸에 도달하지 못한 채 아직 배치할 글자가 남아 있을 수 있기 때문이다. 하지만 여기서는 Fretchif가 문자열을 암호화할 때 그런 일이 일어나지 않았다고 보장된다.
입력
첫째 줄에 격자의 행과 열의 수를 나타내는 두 정수 , 이 주어진다. 둘째 줄에 개의 글자로 이루어진 문자열이 주어진다(). 이는 암호화된 메시지이다. 메시지는 알파벳 대문자 A부터 Z까지만으로 이루어져 있다. 이 암호문을 만들어 내는 원본 문자열이 존재한다고 보장된다.
출력
프로그램은 암호화되기 전의 원래 메시지 문자열을 한 줄에 출력한다.
힌트
암호화할 문자열이 ABCDEFGHIKLMNOPQRST이고 격자의 크기가 이라고 하자. 암호화 과정의 여러 시점에서 격자는 다음과 같다.
이 예시에서 암호문은 ATKBSJLCRIMDHNEGQOFP가 된다. 예제 2는 ATKBSJLCRIMDHNEGQOFP를 복호화하는 것이고, 복호화하면 ABCDEFGHIJKLMNOPQRST가 된다.



