아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

꽃다발

시간 제한1초메모리 제한1024 MB

요약
로봇이 왼쪽, 오른쪽, 아래로만 이동하며 각 층에서 최소 한 송이씩 꽃을 따 수집하는 서로 다른 꽃 순서의 수를 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

로봇이 NN개 층으로 이루어진 건물 안에 있다. 각 층에는 방이 한 줄로 MM개 놓여 있어, 건물의 모든 방은 N×MN \times M 크기의 직사각형을 이룬다. 일부 방에는 꽃이 한 송이씩 놓여 있다. 로봇은 꽃다발을 모으는 법을 배운다.

로봇이 어떤 방에 있을 때 다음과 같이 움직일 수 있다.

  • 가장 왼쪽 방이 아니라면, 같은 층에서 바로 왼쪽 방으로 이동할 수 있다.
  • 가장 오른쪽 방이 아니라면, 같은 층에서 바로 오른쪽 방으로 이동할 수 있다.
  • 가장 아래층이 아니라면, 지금 있는 방 바로 아래(한 층 아래)에 있는 방으로 이동할 수 있다.

로봇은 가로로 이동하거나 아래로 내려가기만 하며, 절대 위로 올라가지 않는다.

꽃이 있는 방에 들어가면 로봇은 반드시 그 꽃을 집어 꽃다발에 추가한다.

모든 꽃은 서로 다르며, 꽃다발의 모습은 꽃을 넣은 순서에 따라 달라진다. 두 꽃다발은 구성하는 꽃이 다르거나 꽃을 넣은 순서가 다르면 서로 다른 것으로 본다.

로봇은 맨 위층의 아무 방에서나 시작하여 맨 아래층의 아무 방에서나 끝낸다. 또한 로봇은 항상 모든 층에서 꽃을 적어도 한 송이씩 집는 경로를 선택한다.

로봇이 마지막에 모을 수 있는 서로 다른 꽃다발이 몇 가지인지 구하여라. 답을 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 두 정수 NN과 MM이 주어진다.

이어지는 NN개의 줄에는 맨 위층부터 한 줄에 한 층씩 MM개의 문자가 주어진다. 왼쪽에서 ii번째 문자는 그 층의 왼쪽에서 ii번째 방에 꽃이 있는지를 나타낸다.

  • O — 방에 꽃이 없다.
  • X — 방에 꽃이 있다.

모든 층에는 꽃이 적어도 한 송이 있음이 보장된다.

출력

로봇이 모을 수 있는 서로 다른 꽃다발의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

제한

  • 1≤N≤5001 \le N \le 500
  • 1≤M≤3001 \le M \le 300

예제3

  1. 예제 1

    입력
    2 1
    X
    X
    
    예상 출력
    1
    
  2. 예제 2

    입력
    2 2
    XX
    XO
    
    예상 출력
    4
    
  3. 예제 3

    입력
    3 3
    XXX
    XXO
    XOO
    
    예상 출력
    34