你是一位建筑师,负责设计城市的新机场。在完成设计后,你才意识到忘记为控制塔预留空间了。
新机场的布局可以用一个 $r$ 行 $c$ 列的二维网格表示,行号从 1 到 $r$(从上到下),列号从 1 到 $c$(从左到右)。位于第 $i$ 行第 $j$ 列的单元格记为 $(i, j)$。每个单元格要么被占用,要么为空。
你需要放置四个控制塔(编号为 1 到 4),每个控制塔必须放置在不同的空单元格中。为了方便不同塔之间的通信,对于所有 $k = 1, 2, 3$,你要求塔 $k$ 和塔 $k + 1$ 必须放置在同一行或同一列中。
你需要计算满足上述要求的放置控制塔的方法总数。如果存在某个 $k$,使得控制塔 $k$ 被放置在不同的单元格中,则认为这两种放置方式不同。
输入格式
输入的第一行包含两个整数 $r$ 和 $c$ ($1 \le r, c \le 2000$)。接下来的 $r$ 行,每行包含一个长度为 $c$ 的字符串。第 $i$ 行的第 $j$ 个字符如果是 #,则表示单元格 $(i, j)$ 被占用;否则为 .(点)。
输出格式
输出满足上述要求的放置控制塔的方法总数。
样例
输入 1
3 4 .#.# #... .###
输出 1
10
说明 1
图 A.1 展示了放置控制塔的所有 10 种可能方式,其中编号为 1、2、3 和 4 的单元格分别代表控制塔 1、2、3 和 4。
图 A.1:放置控制塔的所有 10 种可能方式。
输入 2
4 6 ###### #.#.#. .#.#.# ######
输出 2
0
说明 2
第 2 行的任何控制塔都不可能与第 3 行的任何控制塔处于同一列。由于没有足够的空单元格将所有四个控制塔放置在同一行中,因此无法满足上述要求。
输入 3
1 10 ..........
输出 3
5040
说明 3
所有 $10 \times 9 \times 8 \times 7 = 5040$ 种控制塔位置组合均满足上述要求。
输入 4
1 10 ##########
输出 4
0
说明 4
没有空单元格可以放置任何控制塔。