카이로 통로

각 칸이 두 오각형 조각으로 나뉜 격자에서 사방 경계에 닿는 연결된 빈 영역을 찾고, 그것이 극소인지 판정한다.

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

문제

카이로 오각형 타일링은 준정오각형으로 평면을 빈틈없이 덮는 방법이다. 카이로의 도로 몇 곳이 이 무늬를 변형해 포장되어 있어서 붙은 이름이다.

오각형마다 비어 있거나(흰색) 칠해져 있는(회색) 유한한 타일링을 생각하자. 통로는 서로 이어진 빈 오각형의 극대 집합 가운데 타일링의 네 경계에 모두 닿는 것이다. 두 오각형은 변을 공유할 때 인접하고, 꼭짓점 하나만 맞닿으면 인접하지 않는다. 한 타일링에 통로는 많아야 하나 있다. 통로에 군더더기 오각형이 없으면, 즉 통로에 속한 오각형 중 어느 하나를 칠해도 남은 오각형이 더는 통로가 되지 않으면 그 통로를 최소 통로라고 한다.

그림은 타일링 네 개를 보여준다. 앞의 세 타일링에는 통로가 있고 노란색으로 칠했다. (a)와 (b)의 통로는 최소이지만 (c)의 통로는 최소가 아니다. 예를 들어 X 표시를 한 타일을 칠해도 통로는 그대로 남는다. 맨 오른쪽 타일링에는 통로가 없다. (a)와 (c)는 첫 번째 예제에 주어진 두 타일링이다.

타일링마다 통로가 있는지, 있다면 최소 통로인지 판정하라. 최소 통로이면 그 크기, 즉 통로에 속한 빈 오각형의 개수를 구하라.

입력

첫 줄에 타일링의 개수 TT가 주어진다. 타일링마다 첫 줄에 정수 NNMM이 공백을 사이에 두고 주어지고, 이어지는 NN개 줄에 각각 이진수 숫자 2M2M개가 주어진다. 이 숫자는 오각형 쌍 aija_{ij}, bijb_{ij}를 나타내며 0은 빈 오각형, 1은 칠해진 오각형이다. ii번째 줄은 ai1a_{i1}, bi1b_{i1}, ai2a_{i2}, bi2b_{i2} 순으로 biMb_{iM}까지 나열한다.

타일링은 정사각형 N×MN \times M개로 이루어진 격자로 읽는다. iijj열 정사각형이 오각형 쌍 하나를 담는다. i+ji + j가 짝수이면 aija_{ij}가 그 정사각형의 왼쪽 절반, bijb_{ij}가 오른쪽 절반이다. i+ji + j가 홀수이면 aija_{ij}가 위쪽 절반, bijb_{ij}가 아래쪽 절반이다. 그래서 가로로 놓인 쌍과 세로로 놓인 쌍이 체스판처럼 번갈아 나타난다. 두 오각형은 이렇게 나눈 절반끼리 길이가 0보다 큰 선분을 공유할 때 인접하고, 절반이 바깥 직사각형의 한 변에 닿으면 그 오각형은 그 경계에 닿은 것이다.

출력

TT개의 줄을 출력한다. kk번째 줄에는 kk번째 타일링에 최소 통로가 있으면 그 통로의 크기를, 없으면 NO MINIMAL CORRIDOR를 출력한다. NO MINIMAL CORRIDOR는 적힌 그대로 출력한다.

제한

  • 1T101 \le T \le 10, 타일링의 개수
  • 모든 타일링 kk에 대해 1Nk1 \le N_k, 1Mk1 \le M_k
  • k=1TNk250\sum_{k=1}^{T} N_k \le 250, 격자 줄 수의 합
  • k=1TMk250\sum_{k=1}^{T} M_k \le 250, 한 줄에 놓인 오각형 쌍 개수의 합