체스판 2

막힌 칸이 있는 격자에 L자 타일을 겹치지 않게 최대한 많이 놓되, 각 타일의 모서리 칸은 검은 칸에 두어야 한다.

어려움8그래프비트 연산동적 계획법아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

동혁이는 직사각형 체스판을 가지고 있다. 체스판의 행과 열은 0번부터 센다. iijj열 칸의 색은 i+ji+j가 짝수이면 검은색, 홀수이면 흰색이다. 체스판의 일부 칸에는 말이 놓여 있다.

윤호는 L 모양 타일을 아주 많이 가지고 있다. 타일은 체스판의 한 칸과 크기가 같은 정사각형 3개를 아래 그림처럼 이어 붙인 모양이다.

OO
O

윤호는 다음 조건을 지키면서 체스판 위에 타일을 올려놓으려고 한다.

  • 타일은 90도, 180도, 270도로 회전시킬 수 있다.
  • 타일 하나는 체스판의 세 칸을 덮어야 한다.
  • 타일끼리 겹치면 안 된다.
  • 말이 놓인 칸은 타일이 덮을 수 없다.
  • 타일의 꼭짓점 칸, 즉 나머지 정사각형 2개와 모두 맞닿은 칸은 검은 칸을 덮어야 한다.

윤호가 놓을 수 있는 타일의 최대 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 체스판의 행 개수 RR와 열 개수 CC가 주어진다. (1R471 \le R \le 47, 1C471 \le C \le 47)

둘째 줄부터 RR개 줄에 체스판의 상태가 주어진다. 각 줄은 길이가 CC인 문자열이고, 'X'는 말이 놓인 칸, '.'는 빈 칸을 뜻한다.

출력

윤호가 놓을 수 있는 타일의 최대 개수를 출력한다.