뒤섞기 게임
시간 제한1초메모리 제한128 MB
회전 규칙이 적힌 맵에 따라 행렬을 반복적으로 뒤섞으면서 최대 10^100번의 턴 동안 각 숫자가 몇 번 기록되는지 10^5로 나눈 나머지를 구하는 문제입니다.
문제
파벨은 정수 행렬 위에서 하는 새로운 게임을 만들었다. 먼저 개의 행과 개의 열을 가진 행렬을 준비하고, 부터 까지의 수를 왼쪽에서 오른쪽으로, 위에서 아래로 채운다. 즉 은 왼쪽 위 구석에, 는 오른쪽 아래 구석에 놓인다. 따라서 행 열(둘 다 부터 시작)의 칸에는 처음에 값 가 들어 있다.
파벨은 아래 규칙에 따라 행렬을 반복해서 뒤섞으면서, 별도의 종이에 수의 수열을 적어 나간다. 그는 이것을 행렬의 뒤섞기라고 부른다. 뒤섞는 방법은 뒤섞기 지도로 정해진다. 뒤섞기 지도는 각 칸이 문자 L, R, N 중 하나인 행렬이다.
파벨은 여러 번의 차례에 걸쳐 게임을 진행한다. 각 차례는 블록의 왼쪽 위 구석이 될 수 있는 모든 칸, 즉 마지막 행과 마지막 열을 제외한 모든 칸을 행 우선 순서로 방문한다: . 번째 차례가 끝나면 다시 칸 로 돌아가 같은 순서를 반복하므로, 방문하는 칸은 주기 로 순환한다.
각 차례에서 파벨은 먼저 지금 방문한 칸에 들어 있는 수를 적는다. 그다음 같은 위치의 뒤섞기 지도 문자를 보고, 방문한 칸을 왼쪽 위 구석으로 하는 블록을 다음과 같이 재배치한다.
R— 블록을 시계 방향으로 회전한다.L— 블록을 반시계 방향으로 회전한다.N— 블록을 그대로 둔다.
블록
a b
c d
을 시계 방향으로 회전하면
c a
d b
이 되고, 반시계 방향으로 회전하면
b d
a c
이 된다.
예를 들어 초기 행렬과 뒤섞기 지도
L R L R
N L L R
L N N L
에 대해 파벨이 처음 여섯 번 적는 수는 이다(다섯 번째 차례에서는 방문한 칸에 이 있고 지도 문자가 N이므로 아무것도 움직이지 않는다).
뒤섞기 지도와 파벨이 진행하는 차례 수 이 주어질 때, 각 수가 몇 번 적히는지 구하여라. 값이 매우 커질 수 있으므로 각 값을 으로 나눈 나머지를 출력한다.
입력
첫 번째 줄에는 세 정수 , , 이 주어진다. 여기서 과 ()는 초기 행렬의 크기이고, ()은 파벨이 진행하는 차례의 수이다.
이어지는 개의 줄에는 각각 R, L, N 중 하나인 문자 개가 있으며, 뒤섞기 지도의 한 행을 나타낸다.
출력
개의 줄을 출력한다. 번째 줄에는 파벨의 번의 차례 동안 값 가 적히는 횟수를 으로 나눈 나머지로 출력한다.