해룡 찾기

그림에서 주어진 표본 모양을 정수 배로 확대한 것과 정확히 일치하는 연결된 덩어리의 개수를 센다.

보통6구현완전 탐색시뮬레이션BFS아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

해룡은 해마, 실고기와 같은 큰 분류군에 속하는 물고기다. 몸이 떠다니는 켈프 조각처럼 보이도록 위장하기 때문에 사진 속에서 찾아내기가 어렵고, 이미 찍어 둔 사진에서 다시 찾기도 쉽지 않다. 그래서 사진 속 해룡을 세어 주는 프로그램을 만든다.

먼저 해룡의 모습을 나타내는 2차원 그림 하나가 주어진다. 이 그림에서 해룡을 이루는 픽셀은 가로와 세로 이동만으로 모두 이어져 있다. 다음으로 해룡을 찾을 사진이 주어지고, 그 안에 해룡이 몇 마리 있는지 세면 된다.

세는 대상은 전체가 온전히 보이고 예시 그림과 똑같이 생긴 해룡뿐이다. 다만 카메라에 더 가까이 있어서 크게 찍힌 해룡도 센다. 확대한 해룡 그림은 원래 그림의 픽셀 하나를 2×22 \times 2 픽셀 정사각형으로 바꾸거나 3×33 \times 3 정사각형으로 바꾸는 식으로 얻는다. 한 마리 안에서는 모든 정사각형의 크기가 같다. 회전하거나 좌우로 뒤집은 모습은 세지 않는다.

사진에서 'X' 칸을 상하좌우로 이어 붙여 만든 극대 연결 덩어리 하나가 물체 하나다. 어떤 덩어리가 배율 kk로 확대한 예시 그림과 정확히 일치하면, 즉 빠진 칸도 없고 덧붙은 칸도 없으면 해룡 한 마리로 센다. 그래서 두 마리가 맞닿아 한 덩어리를 이루면 어느 쪽도 세지 않는다. 반대로 어떤 해룡의 경계 상자 안에 그 해룡과 떨어진 다른 덩어리가 놓여 있어도 그 해룡은 그대로 센다.

입력

첫 줄에 파일에 들어 있는 데이터 집합의 개수 KK (K1K \ge 1)가 주어진다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어진다.

각 데이터 집합의 첫 줄에는 양의 정수 네 개 hsh_s, wsw_s, hph_p, wpw_p가 주어진다. hs×wsh_s \times w_s (1hs,ws201 \le h_s, w_s \le 20)는 예시 해룡 그림의 크기이고, hsh_s가 높이이며 wsw_s가 너비다. hp×wph_p \times w_p (1hp,wp1001 \le h_p, w_p \le 100)는 해룡을 찾을 사진의 크기다.

그다음 hsh_s개의 줄에는 각각 정확히 wsw_s개의 문자가 주어지고, 각 문자는 '.' 또는 'X'다. 'X' 문자가 해룡을 이룬다. 예시 그림의 어떤 'X'에서 다른 어떤 'X'로도 'X' 칸만 밟으며 상하좌우로 갈 수 있고, 'X'는 적어도 하나 있다.

그다음 hph_p개의 줄에는 각각 정확히 wpw_p개의 문자가 주어지고, 역시 '.' 또는 'X'다. 이 사진에서 해룡은 어느 한 칸도 빠지지 않고 군더더기도 붙지 않은 상태로만 나타난다. 다시 말해 해룡이 다른 물체와 맞닿거나 일부가 가려진 경우는 해룡으로 세지 않는다.

출력

각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 x는 데이터 집합의 번호이며 1부터 센다. 다음 줄에 사진에 들어 있는 해룡의 마리 수를 출력한다.

각 데이터 집합의 출력 뒤에는 빈 줄을 하나 출력한다.