QOJ.ac

QOJ

时间限制: 30.0 s 内存限制: 256 MB 总分: 100

#17457. 巫师的甜甜圈

统计

你的师父去城里办一天事。你本可以度过轻松的一天,不用听他的唠叨。但他命令你在傍晚前做好甜甜圈面团。他非常喜欢甜甜圈,每天不吃几十个就活不下去。在这么美好的一天里,这真是个苦差事。

但上周,你偷听到了师父使用的一个魔法咒语。是时候尝试一下了。你对放在厨房角落的扫帚念了咒语。伴随着一道闪光,扫帚长出了两只胳膊和两条腿,活了过来。你命令它,它便从仓库里拿来面粉,开始揉面。咒语起作用了,它揉得可真快!

几分钟后,厨房的桌子上就堆起了高高的面团。这足够下周用了。“好,现在停下。”你命令道。但他没有停下来。救命!你不知道让他停下来的咒语!很快,厨房的桌子上就摆满了成百上千块面团,而他仍在尽其所能地快速工作。如果你现在不阻止他,你就会在塞满面团的厨房里窒息。

等等,师父不是把他的咒语写在笔记本上吗?你去了他的书房,找到了记录着停止咒语的笔记本。

但这并不是故事的结局。笔记本上写的咒语不易被他人阅读。他用一个塑料甜甜圈模型作为记录咒语的笔记本。他将甜甜圈模型的表面划分为网格(图 B.1),并填上字母(图 B.2)。他非常小心地隐藏了咒语,使得表面上的图案看起来毫无意义。但你发现他写这个图案时,使得咒语“出现”了不止一次(具体条件见下一段)。咒语不一定是自左向右书写的,而是可以沿着 8 个方向中的任意一个,即:自左向右、自右向左、自上而下、自下而上,以及 4 个对角线方向。

你应该能找到出现不止一次的最长字符串作为咒语。这里,如果甜甜圈上存在满足以下条件的方格序列,其对应的字符串相同,则认为该字符串出现不止一次:

  • 每个方格序列自身不重叠。(两个不同的方格序列可以共享一些方格。)
  • 这些方格序列从不同的方格开始,和/或走向不同的方向。

图 B.1:填入字母前的巫师甜甜圈,显示网格和 8 个可能的咒语方向

图 B.2:填入字母后的巫师甜甜圈

注意,满足第一个条件的回文串(即正读和反读都相同的字符串)会“出现”两次。

甜甜圈上的图案以字母矩阵的形式给出,如下所示:

ABCD
EFGH
IJKL

注意,甜甜圈的表面没有边界;图案的顶边和底边、左边和右边是分别相连的。可以存在比图案的垂直和水平长度都更长的方格序列。例如,在上述图案中,从字母 F 开始,向 8 个方向延伸的最长不自重叠序列对应的字符串如下:

FGHE
FKDEJCHIBGLA
FJB
FIDGJAHKBELC
FEHG
FALGBIHCJEDK
FBJ
FCLEBKHAJGDI

请编写一个程序,在被甜甜圈面团窒息之前找到这个魔法咒语。

输入格式

输入由多个数据集组成。每个数据集的第一行包含两个整数 $h$ 和 $w$,表示图案的大小,随后是 $h$ 行,每行包含 $w$ 个从 A 到 Z 的大写字母,表示甜甜圈上的图案。你可以认为 $3 \le h \le 10$ 且 $3 \le w \le 20$。

输入以包含两个零的一行结束。

输出格式

对于每个数据集,输出魔法咒语。如果存在多个长度相同的最长字符串,则字典序最小的那个必须是咒语。已知咒语的长度至少为两个字母。如果找不到任何咒语,输出 0(零)。

样例

输入样例 1

5 7
RRCABXT
AABMFAB
RROMJAC
APTADAB
YABADAO
3 13
ABCDEFGHIJKLM
XMADAMIMADAMY
ACEGIKMOQSUWY
3 4
DEFG
ACAB
HIJK
3 6
ABCDEF
GHIAKL
MNOPQR
10 19
JFZODYDXMZZPEYTRNCW
XVGHPOKEYNZTQFZJKOD
EYEHHQKHFZOVNRGOOLP
QFZOIHRQMGHPNISHXOC
DRGILJHSQEHHQLYTILL
NCSHQMKHTZZIHRPAUJA
NCCTINCLAUTFJHSZBVK
LPBAUJIUMBVQYKHTZCW
XMYHBVKUGNCWTLLAUID
EYNDCCWLEOODXYUMBVN
0 0

输出样例 1

ABRACADABRA
MADAMIMADAM
ABAC
0
ABCDEFGHIJKLMNOPQRSTUVWXYZHHHHHABCDEFGHIJKLMNOPQRSTUVWXYZ

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.