植物园规划了一片 N \times N 的方格形观赏区,每一个方格种植了一种特色植物,并用一个大写字母(A–Z)来表示该植物的品种简称。
游客小 A 从入口(左上角格子 1,1)出发,前往出口(右下角格子 N,N)。由于园内道路设计限制,他每一步只能选择向右或向下移动一格且从 1,1 格子出发之后,在达到 N,N 格子之前,不能离开观赏区。
小 A 在游览时会记录下他走过的每一种植物品种,形成一个长度为 2 \times N-1 的字符串(起点 + 所有中间格子 + 终点)。园方有一个特别的评选活动:如果这条路径对应的植物品种序列是一个回文序列(从前往后读和从后往前读完全相同),则这条游览路线将被评为“锦鲤路径”。
请你帮助园方统计:从入口到出口的所有可能游览路径中,有多少条路径形成的植物品种序列恰好是回文序列。不同路径即使生成相同的序列,也需要分别计数。
请输出符合要求的路线总数对 10^9+7 取模后的结果。
第一行包含一个正整数 N,表示植物园方格的行数和列数。
接下来 N 行,每行 N 个连续的大写字母(无空格分隔),表示从上到下、从左到右每个方格的植物品种简称。
输出一行一个非负整数,表示满足条件的路径数量(对 10^9+7 取模后的结果)。
4 ABCD BXZX CDXB WCBA
12
6 ABCCBA BACDCB CDDDDC CDDDDC BACDCB ABCCBA
30
10 ABCDEEDCBA BCDEFFEDCB CDEFGGGFEC DEFGHHHGFE EFGHIJJHGF EFGHJJJHGF DEFGHHHGFE CDEFGGGFEC BCDEFFEDCB ABCDEEDCBA
866
从入口 1,1 到出口 4,4 共有 20 条合法路径(需向右移动 3 次,向下移动 3 次)。
其中形成回文序列的路径共有 12 条,对应的回文字符串包括:
ABCDCBA(1 条路径)ABCWCBA(1 条路径)ABXZXBA(6 条路径)ABXDXBA(4 条路径)总计 1 + 1 + 6 + 4 = 12 条。
对于 10\% 的数据,满足 1 ≤ N ≤ 25,且方格中的字母仅有 ABC 三种。
对于 20\% 的数据,满足 1 ≤ N ≤ 80,且方格中的字母仅有 ABC 三种。
对于全部测试数据,满足 1 ≤ N ≤ 500,每个格子中的字符均为大写字母 A–Z。