Educational Codeforces Round 32 |
---|
Закончено |
На плоскости отмечены 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
Название |
---|