만드는 중입니다

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

숫자로만 이루어진 부분 직사각형

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

요약
숫자만 있는 부분 직사각형마다 숫자 합의 제곱을 구해 모두 더한 값을 998244353으로 나눈 나머지를 구합니다.
난이도

보통10점 중 6점

유형
누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

HH행 WW열로 이루어진 정사각형 칸이 있다. 각 칸에는 숫자 하나 또는 별표(‘*’)가 적혀 있다. 위에서 ii번째 행, 왼쪽에서 jj번째 열에 있는 칸을 (i,j)(i,j)로 나타낸다.

부분 직사각형은 직사각형 모양을 이루는 칸들의 집합이다. 정확히는 1≤t≤b≤H1 \le t \le b \le H, 1≤l≤r≤W1 \le l \le r \le W를 만족하는 정수 tt, bb, ll, rr이 있고 S={(i,j)∣t≤i≤b∧l≤j≤r}S = \{(i,j) \mid t \le i \le b \wedge l \le j \le r \}일 때, 집합 SS를 부분 직사각형이라고 한다. 부분 직사각형의 모든 칸에 숫자가 적혀 있으면 숫자로만 이루어진 부분 직사각형이다. 숫자로만 이루어진 부분 직사각형의 점수는 그 안에 있는 숫자의 합의 제곱이다.

숫자로만 이루어진 모든 부분 직사각형의 점수 합을 998244353998244353으로 나눈 나머지를 구하라.

입력

입력은 다음 형식으로 주어진다.

HH WW A1,1A1,2⋯A1,WA_{1,1}A_{1,2}\cdots A_{1,W} A2,1A2,2⋯A2,WA_{2,1}A_{2,2}\cdots A_{2,W} ⋮\vdots AH,1AH,2⋯AH,WA_{H,1}A_{H,2}\cdots A_{H,W}

첫 줄에는 HH와 WW가 주어진다 (1≤H≤20001 \le H \le 2000, 1≤W≤20001 \le W \le 2000). 이어지는 HH개의 줄에는 각각 WW개의 문자가 주어진다. Ai,jA_{i,j}는 칸 (i,j)(i,j)의 문자로, 0부터 9까지의 숫자 또는 별표(‘*’)이다. 숫자로만 이루어진 부분 직사각형이 적어도 하나 있음이 보장된다.

출력

숫자로만 이루어진 모든 부분 직사각형의 점수 합을 998244353998244353으로 나눈 나머지를 한 줄에 출력한다.

힌트

첫 번째 테스트 케이스에는 아래 그림과 같이 숫자로만 이루어진 부분 직사각형이 5개 있다. 이들 점수의 합은 42+42+92+(4+4)2+(4+9)2=3464^2 + 4^2 + 9^2 + (4 + 4)^2 + (4 + 9)^2 = 346이다.

그림 F.1. 첫 번째 테스트 케이스의 숫자로만 이루어진 부분 직사각형

예제4

  1. 예제 1

    입력
    2 2
    44
    9*
    
    예상 출력
    346
    
  2. 예제 2

    입력
    2 3
    314
    28*
    
    예상 출력
    601
    
  3. 예제 3

    입력
    4 6
    314159
    2*6535
    *89793
    238*4*
    
    예상 출력
    37655
    
  4. 예제 4

    입력
    18 20
    65929431919981098712
    34182289733359024486
    *5999742744659484782
    03563591172305229098
    55764088882794210744
    65542986390400199274
    24954674699538357427
    65448003011829165060
    0570520*394989799204
    21113635765787241691
    24382969673042349665
    04571518994293776944
    42950768895299998684
    02191975238817773041
    08629513210946362875
    91583470151322043009
    00337992511803056114
    59396973995193492513
    
    예상 출력
    78257625