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