스프링클러 2: 알팔파의 귀환
시간 제한2초메모리 제한512 MB
일부 칸이 막힌 N x N 격자에 옥수수 sprinkler와 alfalfa sprinkler를 놓아 모든 칸이 정확히 한 종류의 sprinkler로만 덮이도록 하는 경우의 수를 센다.
문제
농부 존은 격자 모양의 작은 밭을 가지고 있다 (). 위에서 번째 행의 왼쪽에서 번째 칸을 로 나타낸다 (). 그는 이 밭에 스위트콘과 알팔파를 심으려고 한다. 그러려면 특수한 스프링클러를 설치해야 한다.
칸에 설치한 스위트콘 스프링클러는 왼쪽 아래 방향의 모든 칸, 즉 이고 인 에 물을 뿌린다.
칸에 설치한 알팔파 스프링클러는 오른쪽 위 방향의 모든 칸, 즉 이고 인 에 물을 뿌린다.
스위트콘 스프링클러가 하나 이상 물을 뿌린 칸에는 스위트콘을 기를 수 있고, 알팔파 스프링클러가 하나 이상 물을 뿌린 칸에는 알팔파를 기를 수 있다. 그러나 두 종류의 스프링클러가 모두 물을 뿌린 칸에서는 아무것도 기를 수 없고, 어느 쪽도 물을 뿌리지 않은 칸에서도 아무것도 기를 수 없다.
농부 존이 모든 칸이 비옥하게, 즉 정확히 한 종류의 스프링클러만 물을 뿌리도록 밭에 스프링클러를 설치하는 방법의 수를 로 나눈 나머지를 구하라. 각 칸에는 스프링클러를 최대 하나만 설치할 수 있다.
일부 칸은 이미 털복숭이 소가 차지하고 있다. 이런 칸도 비옥해질 수 있지만, 스프링클러는 설치할 수 없다.
입력
첫째 줄에 정수 이 주어진다.
각 에 대해, 번째 줄에 격자의 번째 행을 나타내는 길이 의 문자열이 주어진다. 문자열의 각 문자는 'W'(털복숭이 소가 차지한 칸) 또는 '.'(빈 칸)이다.
출력
스프링클러를 설치하는 방법의 수를 로 나눈 나머지를 출력한다.