3010 「JOI 2019 Final」勇者比太郎

内存限制:256 MB 时间限制:1000 ms

题目描述

**译自 [JOI 2019 Final](https://www.ioi-jp.org/joi/2018/2019-ho/index.html) T1「[勇者ビ太郎](https://www.ioi-jp.org/joi/2018/2019-ho/2019-ho-t1.pdf) / [Bitaro the Brave](https://www.ioi-jp.org/joi/2018/2019-ho/2019-ho-t1-en.pdf)」** 勇者比太郎正在面对恶魔。 为了攻击恶魔,比太郎会在一个 $H \times W$ 的网格上放置三种道具(分别记作 `J,O,I`)并施放咒语。网格上往下数第 $i$ 行($1 \le i \le H$),左往右数第 $j$ 列($1\le j \le W$)的格子坐标记为 $(i, j)$ 。 现在,比太郎在网格的每个格子中放置了三种道具中的一种,比太郎将施放一个咒语,其威力取决于三种道具的排列方式。具体的,威力大小等于满足以下条件的有序四元组 $(i, j, k, l) (1 \le i < k \le H, 1 \le j < l \le W)$ 的数量。 条件:$(i, j)$ 位置的格子上的道具为 `J`,$(i, l)$ 位置上的道具为 `O`,$(k, j)$ 位置上的道具为 `I`。 比太郎想知道他的咒语的威力是多少。 请写一个程序,根据三种道具在网格上的排列,计算出咒语的威力(即满足上述条件的四元组数量)。

输入格式

从标准输入中读取数据。

第一行包括两个整数 $H, W$,表示网格的高度和宽度。

接下来 $H$ 行,第 $i$ 行给出一个 $W$ 位长的字符串 $S_i$,表示网格第 $i$ 行的道具。

输出格式

输出数据到标准输出中。

输出一行一个整数,表示比太郎的咒语的威力。

样例 1

在这个样例中,$3$ 个四元组分别是 $(1, 1, 3, 2), (2, 1, 3, 3), (2, 1, 3, 4) $。

样例 2

数据范围与提示

Subtask # 分值 $H, W$
$1$ $20$ $H, W \le 100$
$2$ $30$ $H, W \le 500$
$3$ $50$ $H, W \le 3000$

对于所有输入数据,有 $2 \le H, W \le 3000$。

样例

样例输入 1

3 4 JOIJ JIOO IIII

样例输出 1

3

样例输入 2

4 4 JJOO JJOO IIJO IIIJ

样例输出 2

17