페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#5909
서브태스크

디저트의 조합 1초 512MB

문제

H×W 크기 격자판에는 각 칸에 하나씩 디저트가 올려져 있다. 위에서 i번째 행(1 ≤ i ≤ H)과 왼쪽에서 j번째 열(1 ≤ j ≤ W)에 있는 격자칸을 (i, j)로 표시한다.

각 격자칸에는 젤리(J), 오렌지(O), 아이스크림(I)가 올려져 있는데, 일부 디저트를 사랑하는 사람들은 특정한 조건을 만족하며 젤리, 오렌지, 아이스크림이 위치해 있으면 훌륭한 위치에 있다고 생각한다.

구체적으로, 그 조건은 아래 조건을 만족하는 정수(i, j, k, ℓ)의 상황과 같다.

  • 격자칸(i, j)에 젤리(J)을 배치하고, 격자칸(i, ℓ)에 오렌지(O)를, 격자칸(k, j)에 아이스크림(I)를 배치한다.

  • (1 ≤ i < k ≤ H, 1 ≤ j < ℓ ≤ W)

훌륭한 위치에 있는 디저트의 쌍의 수를 계산하는 프로그램을 작성하시오.


입력

입력은 다음과 같이 주어진다.

H W
S1
:
SH

S_i(1 ≤ i ≤ H)는 길이가 W인 문자열이다.

격자칸(i, j)(1 ≤ j ≤ W)에 배열된 디저트는 S_ij번째 문자가 J이면 젤리이고, O이면 오렌지이고, I라면 아이스크림이다.

[제한]

  • 2 ≤ H ≤ 3,000.

  • 2 ≤ W ≤ 3,000.

  • Si는 길이가 W이다 (1 ≤ i ≤ H).

  • Si는 문자 J, O, I 로만 이루어져있다 (1 ≤ i ≤ H).


출력

각 줄에 훌륭한 위치에 있는 디저트의 쌍의 수를 출력한다.


부분문제

번호 점수 조건
#120점

H ≤ 100, W ≤ 100

#230점

H ≤ 500, W ≤ 500

#350점

추가 제한 없음


예제1

입력
34
JOIJ
JIOO
IIII
출력
3

(i, j, k, ℓ) = (1, 1, 3, 2), (2, 1, 3, 3), (2, 1, 3, 4)


예제2

입력
44
JJOO
JJOO
IIJO
IIIJ
출력
17

출처

JOI 2019

역링크