만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

글자로 칠하기

시간 제한2초메모리 제한512 MB

요약
각 질의 부분 직사각형에서 같은 색이 상하좌우로 이어진 덩어리의 개수를 구합니다. 덩어리마다 붓질이 하나씩 필요합니다.
난이도

보통10점 중 7점

유형
그래프, 누적 합, 유니온 파인드
정답자
아직 제출이 없습니다

문제

Bessie는 최근 그림 도구 세트를 받았다. 캔버스는 N×MN \times M 크기의 칸으로 이루어진 직사각형이다. 행은 위에서 아래로 1…N1\ldots N번, 열은 왼쪽에서 오른쪽으로 1…M1\ldots M번까지 번호가 매겨진다 (1≤N,M≤10001\le N,M\le 1000). 칸을 칠하면 'A'부터 'Z'까지 대문자 하나가 그 칸의 색이 된다. 처음에는 모든 칸이 칠해지지 않은 상태이며, 한 칸은 두 번 이상 칠할 수 없다.

Bessie는 칸마다 원하는 색을 정해 두었다. 같은 색으로 칠할 칸들이 연결 성분을 이루면, 즉 집합 안의 어떤 두 칸이든 인접한 칸들을 따라 서로 오갈 수 있으면 그 집합을 한 번의 붓질로 칠할 수 있다. 두 칸은 변을 공유할 때 인접한다.

예를 들어 아래 3×33 \times 3 캔버스는 네 번의 붓질로 칠할 수 있다.

AAB
BBA
BBB
...    ..B    AAB    AAB    AAB
... -> ... -> ... -> BB. -> BBA
...    ...    ...    BBB    BBB

네 번보다 적은 붓질로는 이 결과를 만들 수 없다.

Bessie는 전위 예술가이므로 캔버스 전체가 아니라 일부 부분 직사각형만 칠한다. 후보 직사각형은 QQ개(1≤Q≤10001\le Q\le 1000)이며, 각 후보는 정수 네 개 x1x_1, y1y_1, x2x_2, y2y_2로 주어진다. 이는 행이 x1x_1부터 x2x_2까지, 열이 y1y_1부터 y2y_2까지(양 끝 포함)인 모든 칸으로 이루어진 부분 직사각형을 뜻한다.

각 후보에 대해, 부분 직사각형 안의 모든 칸을 원하는 색으로 칠하고 그 밖의 칸은 칠하지 않은 상태로 두는 데 필요한 붓질의 최소 횟수를 구하라. Bessie는 실제로 칠하지 않으므로 후보들의 답은 서로 독립이다.

입력

첫 줄에 NN, MM, QQ가 주어진다.

이어지는 NN개의 줄에는 각각 캔버스 한 행의 원하는 색을 나타내는 길이 MM의 대문자 문자열이 주어진다.

이어지는 QQ개의 줄에는 각각 후보 부분 직사각형을 나타내는 공백으로 구분된 정수 네 개 x1x_1, y1y_1, x2x_2, y2y_2가 주어진다(1≤x1≤x2≤N1\le x_1\le x_2\le N, 1≤y1≤y2≤M1\le y_1\le y_2\le M).

출력

QQ개의 후보마다 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    4 8 9
    ABBAAAAA
    ABAAAABA
    CAADABBA
    AAAAAAAA
    1 1 4 8
    3 5 3 8
    1 3 2 4
    1 4 2 5
    1 1 3 3
    4 4 4 4
    2 6 4 8
    3 5 4 6
    1 6 3 8
    
    예상 출력
    6
    3
    2
    1
    4
    1
    3
    2
    2