Паліндроми - це весело, але деякі інші струни починають відчувати себе опущеними. Ми можемо перетворити ці рядки в кучеряві паліндроми , розділивши їх на паліндромні масиви шматочків.
Наприклад, рядок "abcabca"
не є паліндром, якщо ми читаємо її символом за символом, але у нас є три різні способи зробити її здоровенним паліндром:
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
Як бачите, прискіплива паліндромність - це дуже інклюзивна концепція; кожну струну можна перетворити на прискіпливий паліндром хоча б одним способом.
Завдання
Напишіть програму або функцію, яка отримує рядок як вхідний і повертає її паліндромну чіткість , тобто кількість його розділів, які є паліндромними масивами.
Тестові справи
OUTPUT | INPUT
--------+---------------------------------------------
1 | ""
1 | "a"
1 | "ab"
2 | "aa"
2 | "aaa"
3 | "abcabca"
4 | "abababab"
28 | "abcabcaabababababcabca"
1 | "bbbbabababbbbababbbaaaaa"
20 | "ababbaaaabababbbaaabbbaa"
5 | "baaabaabababaababaaabbaab"
62 | "bbaaababbabbabbbabaabaabb"
2 | "a man a plan a canal panama"
25 | "ama nap lan aca nal pan ama"
93 | "SATOR AREPO TENET OPERA ROTAS"
976 | "abcabcaabcabcaabcabcaabcabcaabcabcaabcabca"
28657 | "ababababababababababaababababababababababa"
2097152 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Додаткові правила
Ви можете припустити, що вхід буде складатися з 42 або менших символів для друку ASCII, необов'язково оточених строковими роздільниками вашої мови та / або супроводжується новим рядком.
Для кожного дійсного рядка введення ваш код повинен закінчитися менше ніж за одну хвилину на моїй машині (Intel Core i7-3770, 16 Гб оперативної пам’яті, Fedora 21).
При адекватному алгоритмі слід дотримуватися цього часового обмеження. Однак, швидше за все, ви не зможете повторити всі розділи вхідного рядка.
Якщо ви вирішили надрукувати вихід на STDOUT, за ним може пройти один новий рядок.
Діють стандартні правила гольф-коду .