만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

솔리테어

시간 제한4초메모리 제한512 MB

요약
3행 N열 격자의 빈 칸을 채울 때, 위아래 또는 좌우 칸이 모두 채워져 있어야 그 칸을 채울 수 있습니다. 모든 칸을 채우는 순서의 수를 10^9+7로 나눈 나머지를 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 조합론
정답자
아직 제출이 없습니다

문제

JOI 군은 세로 3칸, 가로 NN칸으로 된 격자 보드와 여러 개의 코마를 사용해 게임을 한다. 초기 상태에서는 코마가 놓인 칸이 1개 이상 있고, 코마가 놓이지 않은 칸도 1개 이상 있다.

이 게임의 목표는 코마가 없는 칸에 코마를 한 개씩 놓아서, 보드의 모든 칸에 코마가 놓인 상태를 만드는 것이다. 어떤 칸에 코마를 놓을 수 있는 경우는 다음 중 하나가 만족될 때이다.

  • 그 칸의 바로 위 칸과 바로 아래 칸에 모두 코마가 놓여 있다.
  • 그 칸의 바로 왼쪽 칸과 바로 오른쪽 칸에 모두 코마가 놓여 있다.

JOI 군은 초기 상태에서 시작해 목표에 도달할 때까지 코마를 놓는 순서가 몇 가지인지 알고 싶어 한다. 이 값은 매우 커질 수 있다.

코마를 놓는 순서의 개수를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 구하라.

입력

첫 줄에 정수 NN이 주어진다.

이어지는 3줄에는 각각 NN글자로 이루어진 문자열이 주어진다. 각 글자는 'o' 또는 'x'이다. i번째 줄의 왼쪽에서 j번째 글자는 보드의 위에서 i번째 행, 왼쪽에서 j번째 열 칸의 초기 상태를 나타낸다. 'o'이면 그 칸에 코마가 놓여 있고, 'x'이면 코마가 놓여 있지 않다.

출력

코마를 놓는 순서의 개수를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 한 줄에 출력한다.

제한

1≤N≤20001 \le N \le 2000

예제4

  1. 예제 1

    입력
    3
    oxo
    xxo
    oxo
    
    예상 출력
    14
    
  2. 예제 2

    입력
    10
    ooxooxoxoo
    xooxxxoxxx
    oxoxoooooo
    
    예상 출력
    149022720
    
  3. 예제 3

    입력
    10
    ooxoxxoxoo
    oxxxxxoxxx
    oxooxoxoxo
    
    예상 출력
    0
    
  4. 예제 4

    입력
    20
    oxooxoxooxoxooxoxoxo
    oxxxoxoxxxooxxxxxoox
    oxooxoxooxooxooxoxoo
    
    예상 출력
    228518545