Ізоморфні суфіксні дерева#5941

Ізоморфні суфіксні дерева

2 секунди
256 мегабайтів
Дуже складна

У цій задачі вам потрібно визначити кількість різних рядків, що складаються з символів '0' та '1', суфіксні дерева яких ізоморфні заданому кореневому дереву T.

Два кореневих дерева вважаються ізоморфними, якщо вони мають однакову кількість вершин і існує спосіб пронумерувати вершини кожного з них різними цілими числами від до так, що:

Суфіксне дерево рядка — це кореневе дерево, яке задовольняє наступним умовам:

  1. Кожному ребру дерева відповідає непорожній рядок, що складається з символів '0' та '1'.

  2. Кожному суфіксу рядка +'$', окрім суфікса "$", відповідає рівно один лист (тобто вершина степеня , що не є коренем), такий, що конкатенація рядків ребер на шляху від кореня до цього листа дорівнює даному суфіксу.

  3. Степінь будь-якої вершини, що не є ні листом, ні коренем дерева, строго більший за два.

  4. Дерево має мінімальну можливу сумарну довжину рядків, записаних на ребрах, серед усіх дерев, що задовольняють властивостям -.

Наприклад, суфіксне дерево для рядка "1100" виглядає наступним чином:

Ваше завдання — за заданим кореневим деревом T визначити кількість різних рядків, що складаються з символів '0' та '1', суфіксні дерева яких ізоморфні T.

Вхідні дані

Перший рядок містить ціле число (2 \le n \le 25) — кількість вершин дерева. Вершини дерева пронумеровані цілими числами від до . Коренем дерева є вершина з номером . У наступних n-1 рядках описуються ребра дерева. Кожен з цих рядків містить два цілі числа x_i і y_i (1 \le x_i, y_i \le n, x_i \ne y_i) — номери вершин, які з'єднує чергове ребро дерева.

Вихідні дані

Перший рядок повинен містити ціле число — кількість рядків, суфіксне дерево яких ізоморфне дереву, описаному у вхідних даних (гарантується, що хоча б один такий рядок існує). У наступних рядках повинні бути виведені всі шукані рядки. Виводьте ці рядки в лексикографічному порядку.

Приклади

Приклад 1

Loading
Loading