F. Соедини вершины
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

На плоскости отмечены n точек. Точки расположены таким образом, чтобы они образуют правильный многоугольник (отмеченные точки — его вершины, и они пронумерованы по обходу против часовой стрелки). Вам необходимо провести n - 1 отрезков, каждый должен соединять две отмеченные точки, так, чтобы любая точка была достижима из любой другой по некоторому пути из отрезков.

Однако есть некоторые ограничения. Во-первых, некоторые пары точек не могут быть соединены отрезком напрямую. Во-вторых, проведенные отрезки могут касаться только в какой-либо из отмеченных точек (то есть, если на рисунке отрезки пересекаются, и их пересечение не является одной из отмеченных точек, то рисунок некорректный).

Сколько существует способов соединить все вершины, используя n - 1 отрезок? Два способа считаются различными, когда есть такая пара вершин, между которыми есть отрезок в первом способе, но нет во втором. Так как ответ может быть велик, выведите его по модулю 109 + 7.

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

В первой строке записано одно целое число n (3 ≤ n ≤ 500) — количество отмеченных точек.

Затем идут n строк, в каждой по n элементов. ai, j (j-й элемент строки i) равен 1, если точки i и j можно соединить отрезком напрямую (иначе ai, j = 0). Гарантируется, что для любой пары точек ai, j = aj, i, и для любой точки ai, i = 0.

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

Выведите количество способов соединить точки по модулю 109 + 7.

Примеры
Входные данные
3
0 0 1
0 0 1
1 1 0
Выходные данные
1
Входные данные
4
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
Выходные данные
12
Входные данные
3
0 0 0
0 0 1
0 1 0
Выходные данные
0