#joi2014ho1. [joi2014ho1]JOI 紋章 (JOI Emblem)

[joi2014ho1]JOI 紋章 (JOI Emblem)

任务

给定旧的 JOI 旗和 JOI 纹章的信息,编写一个程序来确定新的 JOI 旗中包含的 JOI 纹章的最大个数。

输入

从标准输入读取以下数据。

  • 第 1 行包含两个整数 M 和 N,用空格分隔。表示 JOI 旗是由 M 行 N 列的正方形组成的。
  • 接下来的 M 行中的每一行包含一个由 N 个字符组成的字符串。每个字符可以是 JOI,其中每行中的第 i 个字符(1iM1 \leqslant i \leqslant M)表示旧 JOI 旗中第 i 行,第 j 个字符(1jN1 \leqslant j \leqslant N)表示旧 JOI 旗中第 i 行,第 j 列的正方形中的字符。
  • 接下来的两行中,每行包含两个字符。每个字符可以是 JOI,其中每行中的第 i 个字符(1i21 \leqslant i \leqslant 2)表示 JOI 纹章中第 i 行,第 j 个字符(1j21 \leqslant j \leqslant 2)表示 JOI 纹章中第 i 行,第 j 列的正方形中的字符。

输出

将新的 JOI 旗中包含的 JOI 纹章的最大个数作为一个整数输出到标准输出中。

限制条件

所有输入数据满足以下条件:

  • 2M1,0002 \leqslant M \leqslant 1,000
  • 2N1,0002 \leqslant N \leqslant 1,000

小任务

小任务 1 [30 分]

满足以下条件:

  • M50M \leqslant 50
  • N50N \leqslant 50

小任务 2 [70 分]

没有额外的限制。

输入示例 1

3 5
JOIJO
IJOOO
IIJIJ
JO
IJ

输出示例 1

3

旧的 JOI 旗和 JOI 纹章如题目中的示例所示。通过使用白纸并将其粘贴在旧 JOI 旗的某个正方形上,我们可以将第 2 行,第 4 列的正方形更改为 J,结果如下所示。

更改一个正方形的例子

在更改后的 JOI 旗中,存在三个区域与 JOI 纹章具有相同的配置,如下所示。

与 JOI 纹章具有相同的配置区域

由于不存在包含四个或更多 JOI 纹章的新 JOI 旗,因此新 JOI 旗中包含的 JOI 纹章的最大个数为 3。

输入示例 2

2 6
JOJOJO
OJOJOJ
OJ
JO

输出示例 2

2

请注意,可能存在不使用白纸即可获得最大数量的情况。

输入示例 3

2 2
JI
IJ
JJ
JJ

输出示例 3

0

在这个特定的输入示例中,不存在任何新的 JOI 旗中包含 JOI 纹章。