만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

쉽게 구별되는 삼각형

시간 제한2초메모리 제한1024 MB

요약
모든 빈 칸에 직각삼각형을 하나씩 그릴 때, 삼각형끼리 또는 삼각형과 검은 정사각형이 변을 공유하지 않는 방법의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 행렬
정답자
아직 제출이 없습니다

문제

에바는 그림 그리기를 좋아한다. 오늘 그녀는 한 변이 단위 칸 nn개인 정사각형 캔버스, 즉 n×nn \times n 캔버스에서 작업하고 있다. 각 칸은 흰색으로 칠해져 있거나, 검은색으로 칠해져 있거나, 아직 칠해지지 않은 빈 칸이다.

에바는 빈 칸마다 검은 삼각형을 하나씩 그리려고 한다. 각 삼각형은 직각삼각형이고 넓이는 12\frac{1}{2} 제곱 단위 칸이다. 삼각형 하나를 그리는 방법은 다음 네 가지가 있다:

각 삼각형은 하나의 작품이며, 에바는 이 삼각형들이 나머지 그림과 쉽게 구별되기를 원한다. 이를 위해 검은 삼각형끼리는 변을 공유할 수 없고, 검은 삼각형은 검은 정사각형과도 변을 공유할 수 없다. 검은 정사각형끼리는 변을 공유해도 된다.

에바가 그림을 완성하는 방법의 수를 구하라. 수가 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

첫 줄에 캔버스의 한 변 길이 nn이 주어진다(1≤n≤10001 \le n \le 1000). 다음 nn개 줄은 위에서 아래 순서로 캔버스를 나타낸다. ii번째 줄은 nn개의 문자 si,1,si,2,…,si,ns_{i,1}, s_{i,2}, \ldots, s_{i,n}로 이루어진다. si,js_{i,j}가 '.'이면 ii행 jj열 칸은 흰색이고, '#'이면 검은색, '?'이면 빈 칸이다.

출력

그림을 완성하는 방법의 수를 998 244 353998\,244\,353으로 나눈 나머지를 한 줄에 출력한다.

힌트

첫 번째 예시에서는 그림을 완성하는 방법이 44가지 있으며, 아래 그림과 같다:

두 번째 예시에서는 그림을 완성하는 방법이 1가지뿐이다:

세 번째 예시에서는 중앙 칸에 어떤 삼각형을 그리든 검은 정사각형 두 개와 변을 공유하게 된다.

예제3

  1. 예제 1

    입력
    2
    .?
    ?#
    
    예상 출력
    4
    
  2. 예제 2

    입력
    3
    #??
    #??
    ?##
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3
    .#.
    #?#
    .#.
    
    예상 출력
    0