每天下午,Jack 都会从他家跑到 John 家。他们的房子位于一个大小为 $N \times M$ 的开阔草地上。Jack 每天都想尝试走一条不同的路径,但他不确定有多少种不同的方式可以到达 John 家。
我们用一个 $N$ 行 $M$ 列的网格来表示这片草地,如下所示:
.... ..X. ....
Jack 住在左上角,John 住在右下角。Jack 每天都想使用不同的路线,但又不想浪费时间,因此他只会向下和/或向右走。此外,草地的某些部分有障碍物(如岩石或房屋),Jack 无法通过它们(在网格中用 X 表示)。
在上述草地中,4 条有效的路线为:
**** *... *... **.. ..X* *.X. **X. .*X. ...* **** .*** .***
请注意,所有有效路线的长度总是相同($N + M - 1$)。
由于可能路径的数量可能非常大,请输出结果模 $1000000007$($10^9 + 7$)的值。
输入格式
第一行包含两个整数 $N$ 和 $M$,分别表示地图的行数和列数。
接下来的 $N$ 行,每行包含 $M$ 个字符。如果字符是点(.),表示该位置是空地。如果字符是 X,表示该位置有障碍物,Jack 无法使用该格子。
左上角和右下角的格子永远不会有障碍物。
输出格式
输出左上角和右下角位置之间可能路径的数量。请记住将结果模 $1000000007$ 后输出。
在大多数语言中,取模运算符为 %。
数据范围
- $2 \le N \le 200$
- $2 \le M \le 200$
样例
输入样例 1
3 4 .... ..X. ....
输出样例 1
4
输入样例 2
3 3 .X. X.. ...
输出样例 2
0
输入样例 3
5 5 ..... ..... ..... ..... .....
输出样例 3
70
输入样例 4
30 20 .................... .................... .................... .................... .................... .................... .................... .................... ....X............... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... ............X....... .................... .................... .................... .................... .................... .................... .................... .................... .................... ....................
输出样例 4
833886024
说明
对于样例 4,实际的路径数结果为 $6768833933400$,但我们需要输出该值模 $1000000007$ 的结果,而 $6768833933400 \bmod 1000000007$ 等于 $833886024$。