你听说过著名的儿童系列丛书《威利在哪里?》(Where's Wally)吗?每本书中都包含各种各样画有数百人的图片。读者的任务是在人群中找到一个名叫威利(Wally)的人。
我们可以将“威利在哪里”看作是一种二维图形图像的模式匹配。我们需要在图片中寻找威利的形象。编写一个计算机程序来解决“威利在哪里”会非常有趣,但这并不是一件容易的事,因为图片中威利的外观可能会有细微的不同。因此,我们放弃了这个想法,转而让问题变得更容易解决。你被要求解决一个简化版的图形模式匹配问题。
给定一个图像和一个模板。两者都是由比特组成的矩形矩阵(实际上,模板总是正方形的)。0 表示白色,1 表示黑色。这里的问题是计算模板在图像中出现的次数,即图像中与模板完全匹配的正方形区域的数量。模板旋转 90 度的任意倍数和/或翻转形成镜像的情况也应当计算在内。
输入格式
输入由多个数据集组成,每个数据集的格式如下:
w h p image data pattern data
数据集的第一行包含三个正整数 $w$、$h$ 和 $p$。$w$ 是图像的宽度,$h$ 是图像的高度,均以比特数计算。$p$ 是模板的宽度和高度。模板总是正方形的。你可以假设 $1 \le w \le 1000$,$1 \le h \le 1000$,且 $1 \le p \le 100$。
接下来的 $h$ 行给出图像数据。每行包含 $\lceil w/6 \rceil$(等价于 $\lfloor (w + 5)/6 \rfloor$)个字符,对应图像的一行。这些字符中的每一个都采用 BASE64 编码格式的一种变体,从左到右表示图像行中的六个比特。编码规则如下表所示。表中数值的最高有效位对应图像中最左边的比特。最后一个字符可能还表示超出图像宽度的几个比特,这些比特应当被忽略。
| 字符 | 数值(六个比特) |
|---|---|
| A–Z | 0–25 |
| a–z | 26–51 |
| 0–9 | 52–61 |
| + | 62 |
| / | 63 |
最后的 $p$ 行给出模板数据。每行包含 $\lceil p/6 \rceil$ 个字符,并以与图像相同的方式进行编码。
包含三个零的一行表示输入结束。输入数据的总大小不超过 2 MB。
输出格式
对于输入中的每个数据集,输出一行,包含图像中匹配的正方形区域的数量。输出行中不应包含多余的字符。
两个或多个匹配的正方形区域可能会相互重叠。在这种情况下,它们应被分别计数。另一方面,同一个正方形区域绝不会被重复计数,即使它既匹配原始模板,又匹配该模板旋转后的版本。
样例
输入样例 1
48 3 3 gAY4I4wA gIIgIIgg w4IAYAg4 g g w 153 3 3 kkkkkkkkkkkkkkkkkkkkkkkkkg SSSSSSSSSSSSSSSSSSSSSSSSSQ JJJJJJJJJJJJJJJJJJJJJJJJJI g Q I 1 1 2 A A A 384 3 2 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/A CDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/AB A A 0 0 0
输出样例 1
8 51 0 98