#P15723. [JAG 2023 Summer Camp #3] Digit-only subrectangles

[JAG 2023 Summer Camp #3] Digit-only subrectangles

说明

有一个由 HHWW 列方格组成的网格。每个方格内要么是一个数字,要么是一个星号 ('*')。从上往下数第 ii 行、从左往右数第 jj 列的方格记为 (i,j)(i, j)

在此问题中,我们考虑子矩形,即构成一个矩形的方格集合。更精确地说,一个方格集合 SS 是一个子矩形,当且仅当存在四个整数 tt, bb, llrr,满足 1tbH1 \leq t \leq b \leq H, 1lrW1 \leq l \leq r \leq W 且 $S = \{(i, j) \mid t \leq i \leq b \land l \leq j \leq r\}$。如果一个子矩形中的每个方格都是数字,则称其为纯数字子矩形。一个纯数字子矩形的分数定义为该子矩形内所有方格数字之和的平方。

你的任务是计算所有纯数字子矩形的分数之和。由于答案可能很大,请输出其对 998,244,353998,244,353 取模的结果。

输入格式

输入包含一个单独的测试用例,格式如下:

$$\begin{aligned} &H \ W \\ &A_{1,1} A_{1,2} \cdots A_{1,W} \\ &A_{2,1} A_{2,2} \cdots A_{2,W} \\ &\vdots \\ &A_{H,1} A_{H,2} \cdots A_{H,W} \end{aligned}$$

第一行包含两个整数 HHWW,满足 1H2,0001 \leq H \leq 2,0001W2,0001 \leq W \leq 2,000。接下来的 HH 行,每行包含 WW 个字符。其中,Ai,jA_{i,j} 是方格 (i,j)(i, j) 中的字符,它要么是一个 0099 之间的数字(含),要么是一个星号 ('*')。保证至少存在一个纯数字子矩形。

输出格式

输出一行,表示所有纯数字子矩形的分数之和,结果对 998,244,353998,244,353 取模。

2 2
44
9*
346
2 3
314
28*
601
4 6
314159
2*6535
*89793
238*4*
37655
18 20
65929431919981098712
34182289733359024486
*5999742744659484782
03563591172305229098
55764088882794210744
65542986390400199274
24954674699538357427
65448003011829165060
0570520*394989799204
21113635765787241691
24382969673042349665
04571518994293776944
42950768895299998684
02191975238817773041
08629513210946362875
91583470151322043009
00337992511803056114
59396973995193492513
78257625

提示

在样例输入 1 中,共有五个纯数字子矩形,如下图所示。它们的分数之和为 42+42+92+(4+4)2+(4+9)2=3464^2 + 4^2 + 9^2 + (4 + 4)^2 + (4 + 9)^2 = 346

:::align{center}

图 F.1. 样例输入 1 中的纯数字子矩形 :::

翻译由 DeepSeek V3.2 完成