Олимпиадный тренинг

Задача . E. Ваня и шарики


Ваня играет в игру, в которой на поле размером n × n в каждой клетке находится шарик со значением 0, 1, 2 или 3. Требуется за один ход уничтожить крест из шариков, такой что произведение значений составляющих его шариков максимально. Кресты из шариков могут быть обычные и повёрнутые. Например:


**o**
**o**
ooooo
**o**
**o**

или


o***o
*o*o*
**o**
*o*o*
o***o

Формально, крест задаётся тремя целыми числами r, c и d, такими что d ≤ r, c ≤ n - d + 1. При этом обычный крест состоит из шариков с координатами (x, y) (здесь x означает номер строки, а y — столбца), такими что выполнено |x - r|·|y - c| = 0 и |x - r| + |y - c| < d. Повёрнутый крест состоит из шариков с координатами (x, y), такими что |x - r| = |y - c| и |x - r| < d.

Ваня хочет узнать максимально возможное произведение значений шариков, образующих один крест. Поскольку ответ может быть слишком большим, Ваня хочет знать это число по модулю 109 + 7.

Входные данные

В первой строке входных данных находится число n (1 ≤ n ≤ 1000) — размерность таблицы с шариками.

В каждой из следующих n строк записано n символов «0», «1», «2» или «3», описывающих значения, записанные в шариках.

Выходные данные

Выведите самое большое возможное произведение по модулю 109 + 7. Обратите внимание, что требуется не максимизировать остаток от деления, а найти максимальное число и вывести его по модулю 109 + 7.

Примечание

В первом примере максимальное произведение достигается на повёрнутом кресте с центром в точке (3, 3) и радиусом 1: 2·2·3·3·3 = 108.


Примеры
Входные данныеВыходные данные
1 4
1233
0213
2020
0303
108
2 5
00300
00300
33333
00300
00300
19683
3 5
00003
02030
00300
03020
30000
108
4 5
21312
10003
10002
10003
23231
3
5 5
12131
12111
12112
21311
21212
24

time 3000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя