꽃다발

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

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

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

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

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

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

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

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

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

입력

첫째 줄에 두 정수 NNMM이 주어진다.

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

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

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

출력

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

제한

  • 1N5001 \le N \le 500
  • 1M3001 \le M \le 300