물주기 계획 검증 3

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

사라는 커다란 직사각형 땅에서 농사를 짓는다. 땅은 $5R$개의 행과 $5C$개의 열로 이루어진 격자다. 다섯 행마다 가로 울타리가, 다섯 열마다 세로 울타리가 놓여 있어서 땅은 $5 \times 5$ 크기의 구역 $R \times C$개로 나뉜다.

새가 작물을 쪼아 먹는 것을 막으려고 몇몇 구역에는 허수아비가 서 있다. 허수아비는 칸 하나를 차지하고, 한 구역에 많아야 하나 있다.

가뭄에는 스프링클러로 물을 준다. 스프링클러 하나에는 노즐이 셋 있다. 가운데 노즐 하나와 옆 노즐 둘이고, 옆 노즐은 가운데 노즐과 상하좌우로 인접한 칸에 하나씩 놓인다. 그래서 스프링클러 하나는 정확히 세 칸을 차지하고 그 세 칸에 물을 준다. 세 칸은 일직선이거나 ㄱ자 모양이다.

물주기 계획은 허수아비가 없는 모든 칸에 스프링클러가 정확히 하나씩 물을 주도록 스프링클러를 놓은 것이다. 허수아비가 있는 칸에는 노즐을 놓지 않고, 노즐은 땅 밖으로 나가지 않는다.

스프링클러 하나가 물을 주는 세 칸이 같은 구역에 있어야 하는 것은 아니다. 세 칸이 이웃한 구역에 걸치면 사라는 그 두 칸 사이의 울타리에 구멍을 뚫는다.

계획은 땅과 같은 모양의 문자 그림으로 적는다. 빈 칸 자리에는 소문자를 적고, 같은 스프링클러가 물을 주는 두 칸 사이의 울타리 문자는 밑줄 _로 바꾼다. 글자는 다음 규칙을 따른다.

  1. 스프링클러 하나가 물을 주는 세 칸은 서로 다른 구역에 있더라도 같은 글자로 적는다.
  2. 같은 구역에서 인접한 두 칸을 서로 다른 스프링클러가 담당하면 두 칸은 다른 글자로 적는다.
  3. 이웃한 구역에서 인접한 두 칸을 서로 다른 스프링클러가 담당하고 그 사이에 구멍이 뚫려 있으면 두 칸은 다른 글자로 적는다.
  4. 앞의 규칙을 지키는 한, 서로 다른 구역에 있는 인접한 두 칸을 같은 글자로 적어도 된다.

이 규칙 덕분에 계획만 보고 스프링클러를 되살릴 수 있다. 인접한 두 칸은 글자가 같으면서 같은 구역에 있거나, 글자가 같으면서 사이에 구멍이 뚫려 있을 때 같은 스프링클러가 담당한다. 이렇게 이어지는 칸을 모두 모은 덩어리 하나가 스프링클러 하나다.

땅과 계획이 주어진다. 계획이 올바른지 판정하고, 올바르면 울타리에 뚫은 구멍의 개수를 세어라. 계획은 다음 세 조건을 모두 만족할 때 올바르다.

  1. 허수아비 자리에는 #가, 빈 칸 자리에는 소문자 하나가 적혀 있다. 울타리 자리에는 원래 울타리 문자나 밑줄이 있고, 울타리가 만나는 + 자리는 그대로 +다.
  2. 위 방법으로 되살린 덩어리가 모두 정확히 세 칸이다.
  3. 밑줄을 사이에 둔 두 칸에는 같은 소문자가 적혀 있다.

입력

첫째 줄에 $R$과 $C$가 주어진다. ($1 \le R, C \le 100$)

다음 $6R-1$개 줄에는 각각 문자 $6C-1$개로 땅이 주어진다. 칸 하나는 문자 하나로 나타낸다. .은 빈 칸, #(아스키 35)은 허수아비다. 세로 울타리는 |(아스키 124), 가로 울타리는 -(빼기 기호)로 나타내고, 울타리가 만나는 자리는 +로 나타낸다. 울타리는 두께가 없지만 문자로 그린다.

이어서 $6R-1$개 줄에 같은 모양으로 계획이 주어진다. 계획의 각 줄은 영문자와 #, |, -, +, _로 이루어진다. 올바른 계획이라는 보장은 없다.

출력

계획이 올바르면 울타리에 뚫은 구멍의 개수를 출력한다. 올바르지 않으면 -1을 출력한다.