꽃다발
시간 제한1초메모리 제한1024 MB
로봇이 왼쪽, 오른쪽, 아래로만 이동하며 각 층에서 최소 한 송이씩 꽃을 따 수집하는 서로 다른 꽃 순서의 수를 10^9+7로 나눈 나머지를 구한다.
문제
로봇이 개 층으로 이루어진 건물 안에 있다. 각 층에는 방이 한 줄로 개 놓여 있어, 건물의 모든 방은 크기의 직사각형을 이룬다. 일부 방에는 꽃이 한 송이씩 놓여 있다. 로봇은 꽃다발을 모으는 법을 배운다.
로봇이 어떤 방에 있을 때 다음과 같이 움직일 수 있다.
- 가장 왼쪽 방이 아니라면, 같은 층에서 바로 왼쪽 방으로 이동할 수 있다.
- 가장 오른쪽 방이 아니라면, 같은 층에서 바로 오른쪽 방으로 이동할 수 있다.
- 가장 아래층이 아니라면, 지금 있는 방 바로 아래(한 층 아래)에 있는 방으로 이동할 수 있다.
로봇은 가로로 이동하거나 아래로 내려가기만 하며, 절대 위로 올라가지 않는다.
꽃이 있는 방에 들어가면 로봇은 반드시 그 꽃을 집어 꽃다발에 추가한다.
모든 꽃은 서로 다르며, 꽃다발의 모습은 꽃을 넣은 순서에 따라 달라진다. 두 꽃다발은 구성하는 꽃이 다르거나 꽃을 넣은 순서가 다르면 서로 다른 것으로 본다.
로봇은 맨 위층의 아무 방에서나 시작하여 맨 아래층의 아무 방에서나 끝낸다. 또한 로봇은 항상 모든 층에서 꽃을 적어도 한 송이씩 집는 경로를 선택한다.
로봇이 마지막에 모을 수 있는 서로 다른 꽃다발이 몇 가지인지 구하여라. 답을 로 나눈 나머지를 출력한다.
입력
첫째 줄에 두 정수 과 이 주어진다.
이어지는 개의 줄에는 맨 위층부터 한 줄에 한 층씩 개의 문자가 주어진다. 왼쪽에서 번째 문자는 그 층의 왼쪽에서 번째 방에 꽃이 있는지를 나타낸다.
O— 방에 꽃이 없다.X— 방에 꽃이 있다.
모든 층에는 꽃이 적어도 한 송이 있음이 보장된다.
출력
로봇이 모을 수 있는 서로 다른 꽃다발의 개수를 로 나눈 나머지를 출력한다.