해룡 찾기
시간 제한2초메모리 제한512 MB
그림에서 주어진 표본 모양을 정수 배로 확대한 것과 정확히 일치하는 연결된 덩어리의 개수를 센다.
문제
해룡은 해마, 실고기와 같은 큰 분류군에 속하는 물고기다. 몸이 떠다니는 켈프 조각처럼 보이도록 위장하기 때문에 사진 속에서 찾아내기가 어렵고, 이미 찍어 둔 사진에서 다시 찾기도 쉽지 않다. 그래서 사진 속 해룡을 세어 주는 프로그램을 만든다.
먼저 해룡의 모습을 나타내는 2차원 그림 하나가 주어진다. 이 그림에서 해룡을 이루는 픽셀은 가로와 세로 이동만으로 모두 이어져 있다. 다음으로 해룡을 찾을 사진이 주어지고, 그 안에 해룡이 몇 마리 있는지 세면 된다.
세는 대상은 전체가 온전히 보이고 예시 그림과 똑같이 생긴 해룡뿐이다. 다만 카메라에 더 가까이 있어서 크게 찍힌 해룡도 센다. 확대한 해룡 그림은 원래 그림의 픽셀 하나를 픽셀 정사각형으로 바꾸거나 정사각형으로 바꾸는 식으로 얻는다. 한 마리 안에서는 모든 정사각형의 크기가 같다. 회전하거나 좌우로 뒤집은 모습은 세지 않는다.
사진에서 'X' 칸을 상하좌우로 이어 붙여 만든 극대 연결 덩어리 하나가 물체 하나다. 어떤 덩어리가 배율 로 확대한 예시 그림과 정확히 일치하면, 즉 빠진 칸도 없고 덧붙은 칸도 없으면 해룡 한 마리로 센다. 그래서 두 마리가 맞닿아 한 덩어리를 이루면 어느 쪽도 세지 않는다. 반대로 어떤 해룡의 경계 상자 안에 그 해룡과 떨어진 다른 덩어리가 놓여 있어도 그 해룡은 그대로 센다.
입력
첫 줄에 파일에 들어 있는 데이터 집합의 개수 ()가 주어진다. 이어서 개의 데이터 집합이 다음 형식으로 주어진다.
각 데이터 집합의 첫 줄에는 양의 정수 네 개 , , , 가 주어진다. ()는 예시 해룡 그림의 크기이고, 가 높이이며 가 너비다. ()는 해룡을 찾을 사진의 크기다.
그다음 개의 줄에는 각각 정확히 개의 문자가 주어지고, 각 문자는 '.' 또는 'X'다. 'X' 문자가 해룡을 이룬다. 예시 그림의 어떤 'X'에서 다른 어떤 'X'로도 'X' 칸만 밟으며 상하좌우로 갈 수 있고, 'X'는 적어도 하나 있다.
그다음 개의 줄에는 각각 정확히 개의 문자가 주어지고, 역시 '.' 또는 'X'다. 이 사진에서 해룡은 어느 한 칸도 빠지지 않고 군더더기도 붙지 않은 상태로만 나타난다. 다시 말해 해룡이 다른 물체와 맞닿거나 일부가 가려진 경우는 해룡으로 세지 않는다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 x는 데이터 집합의 번호이며 1부터 센다. 다음 줄에 사진에 들어 있는 해룡의 마리 수를 출력한다.
각 데이터 집합의 출력 뒤에는 빈 줄을 하나 출력한다.