솔리테어
시간 제한4초메모리 제한512 MB
3행 N열 격자의 빈 칸을 채울 때, 위아래 또는 좌우 칸이 모두 채워져 있어야 그 칸을 채울 수 있습니다. 모든 칸을 채우는 순서의 수를 10^9+7로 나눈 나머지를 구합니다.
문제
JOI 군은 세로 3칸, 가로 칸으로 된 격자 보드와 여러 개의 코마를 사용해 게임을 한다. 초기 상태에서는 코마가 놓인 칸이 1개 이상 있고, 코마가 놓이지 않은 칸도 1개 이상 있다.
이 게임의 목표는 코마가 없는 칸에 코마를 한 개씩 놓아서, 보드의 모든 칸에 코마가 놓인 상태를 만드는 것이다. 어떤 칸에 코마를 놓을 수 있는 경우는 다음 중 하나가 만족될 때이다.
- 그 칸의 바로 위 칸과 바로 아래 칸에 모두 코마가 놓여 있다.
- 그 칸의 바로 왼쪽 칸과 바로 오른쪽 칸에 모두 코마가 놓여 있다.
JOI 군은 초기 상태에서 시작해 목표에 도달할 때까지 코마를 놓는 순서가 몇 가지인지 알고 싶어 한다. 이 값은 매우 커질 수 있다.
코마를 놓는 순서의 개수를 로 나눈 나머지를 구하라.
입력
첫 줄에 정수 이 주어진다.
이어지는 3줄에는 각각 글자로 이루어진 문자열이 주어진다. 각 글자는 'o' 또는 'x'이다. i번째 줄의 왼쪽에서 j번째 글자는 보드의 위에서 i번째 행, 왼쪽에서 j번째 열 칸의 초기 상태를 나타낸다. 'o'이면 그 칸에 코마가 놓여 있고, 'x'이면 코마가 놓여 있지 않다.
출력
코마를 놓는 순서의 개수를 로 나눈 나머지를 한 줄에 출력한다.