블록 맞추기

시간 제한1초메모리 제한128 MB

문제

정사각형 판 위에 여러 개의 ㄷ자 블록이 놓여 있다. ㄷ자 블록은 어떤 직사각형에서 더 작은 직사각형 하나를 잘라 낸 모양이다. 이때 잘라 낸 직사각형은 원래 직사각형의 네 변 중 정확히 한 변에 닿는다.

또 하나의 ㅗ자 블록이 주어진다. 이 블록은 가로 막대와 그 막대에 붙은 기둥으로 이루어진다. 입력의 양의 정수 u, v, w, x, y는 ㅗ자 블록의 회전하지 않은 모양을 다음과 같이 나타낸다.

  • 가로 막대의 길이는 u, 두께는 v이다.
  • 기둥은 막대와 나란한 방향으로 y칸, 막대에 수직인 방향으로 x칸이다.
  • 기둥의 왼쪽 끝은 가로 막대의 왼쪽 끝에서 w칸 떨어져 있다.

ㅗ자 블록을 회전하여 ㄷ자 블록의 오목한 부분에 끼울 수 있다. 끼웠을 때 대상 ㄷ자 블록과 ㅗ자 블록이 합쳐져 하나의 직사각형을 이루어야 한다. 주어진 판에서 이렇게 맞출 수 있는 ㄷ자 블록들을 모두 구하시오.

주의할 점은 다음과 같다.

  1. 정사각형도 직사각형으로 본다.
  2. ㅗ자 블록은 회전할 수 있지만 뒤집을 수는 없다.
  3. 완성되는 직사각형은 대상 ㄷ자 블록을 제외한 다른 ㄷ자 블록과 겹치면 안 된다.
  4. 완성되는 직사각형은 판 밖으로 나가면 안 된다.

입력

첫째 줄에 판의 한 변의 길이 n이 주어진다. n은 50 이하이다.

둘째 줄에 ㅗ자 블록을 나타내는 양의 정수 u, v, w, x, y가 차례로 주어진다.

다음 n개의 줄에는 판의 상태가 주어진다. ㄷ자 블록이 놓인 칸은 1, 비어 있는 칸은 0으로 표시된다. 판에 놓인 모든 블록은 ㄷ자 블록이며, 서로 다른 ㄷ자 블록들은 변을 공유하며 맞닿아 있지 않다.

출력

첫째 줄에 ㅗ자 블록을 끼워 직사각형을 만들 수 있는 ㄷ자 블록의 개수를 출력한다.

둘째 줄부터는 그런 ㄷ자 블록 각각의 왼쪽 위 구석 위치를 한 줄에 하나씩 출력한다. 위치는 판의 위쪽에서부터 센 행 번호와 왼쪽에서부터 센 열 번호로 나타내며, 두 수 사이에는 공백을 하나 둔다. 행과 열은 1부터 센다.

출력해야 할 위치가 여러 개라면 어떤 순서로 출력해도 된다. 맞출 수 있는 ㄷ자 블록이 없다면 0만 출력한다.