青蛙 Maša 身处一个由 $n$ 行 $m$ 列组成的矩阵表示的湖泊中。矩阵中的单元格被标记为 0(水)或 1(睡莲)。从一朵睡莲出发,Maša 可以跳到同一行或同一列的任何其他睡莲上。如果 Maša 在上一次跳跃中改变了她所在的列(即进行了水平跳跃),那么在下一次跳跃中她必须改变她所在的行(即进行垂直跳跃)。如果她在上一次跳跃中改变了她所在的行,那么在下一次跳跃中她必须改变她所在的列。当 Maša 从她当前所在的睡莲上跳走后,该睡莲就会下沉,不能再次被跳上。
Maša 喜欢玩耍,她希望在她的路径上总共访问 5 朵睡莲(包括起点睡莲)。
请帮助她计算,如果她可以选择任意一朵睡莲作为起点,她有多少种不同的跳跃方案。如果两条路径的第一、第二、第三、第四或第五朵睡莲的位置不同,则认为这两条路径是不同的。
输入格式
第一行包含自然数 $n$ 和 $m$($1 \le n, m \le 2000$),含义如题目描述中所述。
接下来的 $n$ 行中,每行包含 $m$ 个字符,字符为 0 或 1,表示湖泊的单元格。
输出格式
输出一个整数,表示题目描述中问题的答案。
子任务
| 子任务 | 分值 | 数据范围 |
|---|---|---|
| 1 | 8 | $n, m \le 4$ |
| 2 | 27 | $n, m \le 10$ |
| 3 | 58 | $n, m \le 400$ |
| 4 | 17 | 无附加限制 |
样例
输入样例 1
2 3 111 110
输出样例 1
4
输入样例 2
4 4 1111 1111 1111 1111
输出样例 2
2304
输入样例 3
2 5 11110 01111
输出样例 3
48
说明
样例 1 解释:
4 种可能的睡莲跳跃路径为:
- $[1, 1] \to [2, 1] \to [2, 2] \to [1, 2] \to [1, 3]$
- $[1, 2] \to [2, 2] \to [2, 1] \to [1, 1] \to [1, 3]$
- $[1, 3] \to [1, 2] \to [2, 2] \to [2, 1] \to [1, 1]$
- $[1, 3] \to [1, 1] \to [2, 1] \to [2, 2] \to [1, 2]$