Codeforces Round 355 (Div. 2) |
---|
Закончено |
Ваня играет в игру, в которой на поле размером 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.
4
1233
0213
2020
0303
108
5
00300
00300
33333
00300
00300
19683
5
00003
02030
00300
03020
30000
108
5
21312
10003
10002
10003
23231
3
5
12131
12111
12112
21311
21212
24
В первом примере максимальное произведение достигается на повёрнутом кресте с центром в точке (3, 3) и радиусом 1: 2·2·3·3·3 = 108.
Название |
---|