영구 운동 (Small)
시간 제한5초메모리 제한512 MB
최대 4 by 4 격자의 각 벨트에 방향을 정해 레밍이 같은 칸에 겹치지 않게 하는 경우의 수를 1000003으로 나눈 나머지를 구합니다.
문제
레밍 공장의 바닥은 격자로 나뉘어 있다. 각 칸에는 컨베이어 벨트가 하나씩 놓여 있고, 벨트의 방향은 위아래, 좌우, 두 대각선 중 하나다. 벨트는 자기 방향을 따라 앞으로 또는 뒤로 움직이며, 두 방향 중 어느 쪽으로 움직일지는 칸마다 따로 정할 수 있다.

지금은 모든 칸의 중앙에 레밍이 한 마리씩 서 있다. 벨트를 작동시키면 각 레밍은 자기가 서 있는 칸의 벨트가 움직이는 방향으로 이동해 새 칸의 중앙에 도착한다. 모든 이동은 동시에 일어나고 정확히 1초가 걸린다. 이동이 끝나면 레밍은 모두 새 칸에 서 있고, 그 위치에서 같은 과정이 반복된다. 벨트를 끄지 않으면 이 과정은 영원히 이어진다.
- 레밍이 새 칸에 들어서면 그 칸의 중앙에 닿을 때까지 원래 가던 방향으로 계속 간다. 새 칸의 벨트는 다음 1초가 시작될 때부터 레밍에게 영향을 준다.
- 레밍이 격자 밖으로 나가면 반대쪽 같은 위치로 들어온다. 예를 들어 맨 왼쪽 위 칸에서 왼쪽 위 대각선으로 움직이면 맨 오른쪽 아래 칸에 도착한다. 이 이동도 1초가 걸린다.
- 레밍끼리는 부딪히지 않고 서로를 지나쳐 갈 수 있다.
풀어야 할 것은 두 레밍이 같은 순간에 같은 칸의 중앙에 도착하는 일이 한 번도 없도록 벨트마다 방향을 정하는 문제다. 그런 일이 일어나면 두 레밍은 그때부터 붙어서 함께 움직인다.
위 예시에서 벨트 방향을 정하는 두 가지 방법은 다음과 같다.

두 방법 모두 두 레밍이 같은 순간에 같은 칸의 중앙에 도착하는 일이 없다.
바닥 배치가 주어질 때, 두 레밍이 같은 순간에 같은 칸의 중앙에 도착하는 일이 없도록 각 벨트의 방향을 정하는 방법의 수 을 구하라. 이 매우 클 수 있으므로 을 으로 나눈 나머지를 출력한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 이어서 개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에는 양의 정수 과 가 주어진다.
그 다음 개의 줄에는 |, -, /, \ 중에서 고른 문자 개로 이루어진 문자열이 주어진다. 각 문자는 한 칸에 놓인 벨트의 방향을 나타낸다.
|는 위 또는 아래로 움직이는 벨트다.-는 왼쪽 또는 오른쪽으로 움직이는 벨트다./는 오른쪽 위 또는 왼쪽 아래로 움직이는 벨트다.\는 왼쪽 위 또는 오른쪽 아래로 움직이는 벨트다.
제한
출력
각 테스트 케이스마다 한 줄에 Case #x: M을 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, 은 을 으로 나눈 나머지다.