좋은 직사각형

0과 1로 채워진 n×m 격자에서 주어진 직사각형 안에 완전히 들어가는 모든 0 직사각형의 개수를 각 질의마다 구한다.

보통7동적 계획법누적 합행렬아직 제출이 없습니다시간 제한4초메모리 제한256 MB

문제

각 칸에 0 또는 1이 적힌 n×mn \times m 크기의 격자가 있다. 위에서 ii번째 행, 왼쪽에서 jj번째 열에 있는 칸을 (i,j)(i, j)로 나타낸다.

네 정수 aa, bb, cc, dd (1acn1 \le a \le c \le n, 1bdm1 \le b \le d \le m)는 직사각형 {(x,y):axc, byd}\{(x, y) : a \le x \le c,\ b \le y \le d\}를 정한다. 직사각형은 이 조건을 만족하는 칸 전체의 집합이다. 직사각형에 속한 칸이 모두 0이면 그 직사각형을 좋은 직사각형이라고 한다.

쿼리를 qq개 처리하는 프로그램을 작성하시오. 각 쿼리는 직사각형을 하나 주고, 그 직사각형에 완전히 포함되는 좋은 직사각형의 개수를 묻는다.

입력

첫째 줄에 nn, mm, qq가 주어진다 (1n,m501 \le n, m \le 50, 1q3000001 \le q \le 300\,000).

다음 nn개 줄에 격자가 주어진다. 각 줄은 0과 1로만 이루어진 길이 mm의 문자열이다. 행은 위에서 아래로, 열은 왼쪽에서 오른쪽으로 1번부터 번호를 매긴다.

다음 qq개 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 줄에는 직사각형을 나타내는 네 정수 aa, bb, cc, dd가 주어진다 (1acn1 \le a \le c \le n, 1bdm1 \le b \le d \le m).

출력

쿼리마다 답을 한 줄에 하나씩 출력한다.

힌트

첫 번째 예제의 답은 이렇게 나온다.

  • 1번 쿼리: 1×11 \times 1이 5개, 2×12 \times 1이 2개, 1×21 \times 2가 2개, 1×31 \times 3이 1개
  • 2번 쿼리: 1×11 \times 1이 1개
  • 3번 쿼리: 1×11 \times 1이 4개, 2×12 \times 1이 2개, 3×13 \times 1이 1개