문자 판독

두 이진 이미지가 같은 문자를 나타내는지 판정한다. 연결 요소의 개수와 각 요소 사이의 둘러쌈 관계를 비교해 위상적으로 같은 구조인지 확인한다.

보통7그래프BFSDFS구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정체를 알 수 없는 조직이 남긴 이미지 데이터가 발견되었다. 당신은 이 데이터를 분석해야 한다. 조직원은 스스로 만든 문자를 썼고, 이진 이미지 한 장에는 흰 종이에 검은 잉크로 쓴 문자 하나가 들어 있다.

겉모습이 다른 이미지가 같은 문자를 나타내는 경우가 많다. 두 이미지가 같은 문자를 나타내는지는 연결 성분 사이의 둘러싸기 관계로 판정한다. 정의는 다음과 같다. 주어진 이미지의 바깥은 모두 흰 픽셀로 채워져 있다고 가정한다.

  • 흰색 연결 성분: 가로나 세로로 이어진 흰 픽셀의 집합.
  • 검은색 연결 성분: 가로, 세로, 대각선으로 이어진 검은 픽셀의 집합.
  • 연결 성분: 흰색 연결 성분 또는 검은색 연결 성분.
  • 배경 성분: 이미지 바깥의 픽셀을 포함하는 연결 성분. 따라서 이미지 가장자리에 있는 흰 픽셀은 모두 배경 성분에 속한다.
연결됨연결되지 않음

흰 픽셀의 연결성.

연결됨연결됨

검은 픽셀의 연결성.

이미지의 연결 성분 하나를 C1C_1, 같은 이미지에서 색이 반대인 다른 연결 성분을 C2C_2라고 하자. C1C_1에도 C2C_2에도 속하지 않는 픽셀을 모두 C2C_2의 색으로 바꾼 이미지를 생각한다. C1C_1C2C_2가 둘 다 배경 성분이 아니면 이미지 바깥의 픽셀도 C2C_2의 색으로 바꾼다. 이렇게 바꾼 이미지에서 C2C_2의 픽셀이 배경 성분에 하나도 속하지 않으면, 원래 이미지에서 C1C_1C2C_2를 둘러싼다고 한다.

다음 두 조건을 모두 만족하면 두 이미지는 같은 문자를 나타낸다.

  • 두 이미지의 연결 성분 개수가 같다.
  • 두 이미지의 연결 성분 집합을 각각 SS, SS'라고 할 때 다음 조건을 만족하는 전단사 함수 f:SSf : S \to S'가 존재한다.
    • SS에 속하는 모든 연결 성분 CC에 대하여 f(C)f(C)의 색은 CC의 색과 같다.
    • SS에 속하는 모든 C1C_1, C2C_2에 대하여, C1C_1C2C_2를 둘러싸는 것과 f(C1)f(C_1)f(C2)f(C_2)를 둘러싸는 것은 서로 필요충분조건이다.

아래 그림에 있는 두 이미지의 연결 성분은 다음 둘러싸기 관계를 이룬다.

  • C1C_1C2C_2를 둘러싼다.
  • C2C_2C3C_3을 둘러싼다.
  • C2C_2C4C_4를 둘러싼다.
  • C1C'_1C2C'_2를 둘러싼다.
  • C2C'_2C3C'_3을 둘러싼다.
  • C2C'_2C4C'_4를 둘러싼다.

전단사 함수를 f(Ci)=Cif(C_i) = C'_i로 잡으면 위 두 조건을 모두 만족하므로 두 이미지는 같은 문자를 나타낸다.

주어진 두 이미지가 같은 문자를 나타내는지 판정하는 프로그램을 작성하시오.

입력

입력은 데이터 집합 최대 200개로 이루어진다. 0이 두 개 적힌 줄이 나오면 입력이 끝난다. 각 데이터 집합의 형식은 다음과 같다.

image 1
image 2

각 이미지의 형식은 다음과 같다.

h w
p(1,1) ... p(1,w)
...
p(h,1) ... p(h,w)

hhww는 이미지의 세로와 가로 픽셀 수이고, 1h1001 \le h \le 100, 1w1001 \le w \le 100이다. 이어지는 hh개의 줄에는 각각 문자 ww개가 구분자 없이 붙어서 주어진다. p(y,x)p(y,x)는 위에서 yy번째 줄, 왼쪽에서 xx번째 픽셀의 색이다. 마침표(".")는 흰색을, 샵 기호("#")는 검은색을 뜻한다.

출력

각 데이터 집합마다 두 이미지가 같은 문자를 나타내면 yes를, 그렇지 않으면 no를 한 줄에 출력한다. 다른 문자는 출력하지 않는다.