퀸 움직이기
시간 제한1초메모리 제한1024 MB
장애물이 있는 체스판에서 퀸을 정확히 K번 움직여 목표 칸에 도달하는 경우의 수를 구하되, 같은 방향을 연속으로 두 번 쓸 수 없다.
문제
숙제를 하지 않고 체스와 조합론에 빠져있던 은재가 생활관에 체스판을 하나 들고 왔다. 이 체스판은 특이해서 형태의 기본적인 판 뿐만 아니라 크기나 심지어 의 크기처럼 자유자재로 판의 크기를 조절할 수 있다.
체스 고수가 되기 위해서 열심히 체스를 두던 은재는 수많은 패배 끝에, 상대 기물의 수비가 약한 약점 칸을 찾아서 공략하는 것이 중요하다는 걸 깨닫게 되었다. 조합론에 빠진 은재는 퀸을 움직여서 상대의 약점 칸으로 보내는 방법이 얼마나 있을지 궁금해서 하라는 체스는 두지 않고 다음과 같은 질문을 던지게 된다.
체스에서 퀸이 가장 중요한 기물인데, 지금 내 퀸이 있는 위치에서 정확하게 번 움직여서 원하는 위치로 보내는 방법이 얼마나 될까?
현재 체스판에는 퀸의 이동을 방해하는 장애물들과 은재의 퀸이 있다. 장애물이 없을 수도 있다.
체스판은 행 열로 구성되어 있고, 행 열의 칸은 로 나타낸다. ; 또한, 체스판의 각 칸은 장애물이 있는 칸이거나 없는 칸이다.
초기에 퀸의 위치는 , 퀸을 보내고자 하는 위치는 이며, 아래 규칙에 따라 퀸을 움직일 수 있다.
-
현재 칸을 라고 할 때, 다음 가지 방향 중 하나의 방향으로 원하는 거리만큼 움직일 수 있다.
- 위 —
- 아래 —
- 왼쪽 —
- 오른쪽 —
- 왼쪽 위 대각선 —
- 오른쪽 위 대각선 —
- 왼쪽 아래 대각선 —
- 오른쪽 아래 대각선 —
-
정한 방향으로 움직일 때 장애물이 있는 칸을 지날 수 없다.
-
체스판 밖으로 나가거나 장애물이 있는 칸으로 움직일 수 없다.
-
두 번 연속으로 같은 방향으로 움직일 수 없다.
-
퀸을 제자리에 두고 턴을 넘기는 것은 불가능하다.
은재를 위해 은재가 퀸을 번 움직여서 칸으로 보낼 수 있는 경우의 수를 구하는 프로그램을 작성해보자!
입력
첫 번째 줄에 세 정수 , , 가 주어진다.
번째 줄에 문자열 이 주어진다. 칸에 장애물이 있으면 #이고, 칸에 장애물이 없으면 .이다. ;
번째 줄에 두 정수 , 가 주어진다.
번째 줄에 두 정수 , 가 주어진다.
출력
문제의 정답을 으로 나눈 나머지를 출력한다.
제한
- 와 에는 장애물이 없음