뱀 이동
시간 제한4초메모리 제한2048 MB
장애물이 있는 격자와 길이 k인 뱀이 주어질 때, 머리가 각 칸에 도달하는 최소 명령 수를 제곱해 모두 더한 값을 2^64로 나눈 나머지로 구합니다.
문제
Putata는 노트북에서 유명한 뱀 게임을 하고 있다. 뱀은 크기의 격자 위에서 움직이며, 일부 칸에는 장애물이 있을 수 있다. 뱀은 좌표쌍의 수열 로 표현되고, 는 뱀의 길이다. 머리는 에, 꼬리는 에 있으며, 인접한 몸의 부분은 변을 공유하는 칸에 놓인다.
뱀은 문자열로 주어진 명령을 따라 움직인다. 명령은 다섯 종류다.
L: 뱀을 왼쪽으로 한 칸 움직인다. 머리는 로 이동한다.R: 뱀을 오른쪽으로 한 칸 움직인다. 머리는 로 이동한다.U: 뱀을 위로 한 칸 움직인다. 머리는 로 이동한다.D: 뱀을 아래로 한 칸 움직인다. 머리는 로 이동한다.S: 뱀의 길이를 1 줄인다. 꼬리 칸이 지워지고 길이는 이 된다. 일 때는 이 명령을 사용할 수 없다.
머리가 움직이면 나머지 몸의 부분도 함께 움직인다. 번째 부분()은 명령 실행 전 번째 부분이 있던 위치로 옮겨 간다. 뱀은 장애물이 있는 칸이나 격자 밖으로 들어갈 수 없다. 또한 뱀은 자기 자신과 충돌할 수 없으므로, 두 몸의 부분이 같은 칸을 차지해서는 안 된다.
머리를 현재 꼬리가 있는 칸으로 옮기는 것은 허용된다. 실제로는 꼬리가 빠져나가는 순간 머리가 그 칸에 들어가는 상황이다. 일 때는 명령 한 번으로 머리와 꼬리를 맞바꾸는 것도 허용된다.
를 머리가 에 도달하는 데 필요한 최소 명령 수라고 하자. 도달할 수 없으면 이다. 다음 값을 구하라.
입력
첫 줄에 세 정수 , , 가 주어진다 (, ). 각각 격자의 크기와 뱀의 길이다.
다음 개의 줄에는 번째 부분의 위치 , 가 주어진다 (, , ). 모든 좌표쌍은 서로 다르며, 각 부분은 장애물이 없는 칸에 있다.
다음 개의 줄에는 길이 인 문자열이 주어진다. .은 빈 칸, #은 장애물이다.
출력
답을 나타내는 정수 하나를 한 줄에 출력한다.