एल्गोरिदम और डेटा संरचनाएँ

Palindrome Partitioning (पैलिंड्रोम विभाजन)

आपको एक स्ट्रिंग s दी गई है। आपका काम s को ऐसे उपस्ट्रिंग्स में विभाजित करना है, जिनमें से प्रत्येक पैलिंड्रोम हो। s के सभी संभव पैलिंड्रोम विभाजनों को इस तरह लौटाएँ कि प्रत्येक उपस्ट्रिंग को | से अलग किया गया हो। इन विभाजनों का क्रम मनमाना हो सकता है।

पैलिंड्रोम वह स्ट्रिंग है, जिसे आगे और पीछे दोनों तरफ़ से पढ़ने पर एक जैसा दिखता है।

इनपुट

इनपुट में केवल एक स्ट्रिंग s (1 ≤ |s| ≤ 16) शामिल होती है, जिसमें सिर्फ़ छोटे अंग्रेज़ी अक्षर होते हैं।

आउटपुट

s के सभी संभव पैलिंड्रोम विभाजनों की सूची लौटाएँ। प्रत्येक विभाजन को एक स्ट्रिंग के रूप में दिखाएँ, जिसमें उपस्ट्रिंग्स को | प्रतीक से जोड़ा जाए। आउटपुट सूची में विभाजनों का क्रम मनमाना हो सकता है।

उदाहरण

इनपुट

आउटपुट

aab

a

aba

a

Constraints

Time limit: 1.6 seconds

Memory limit: 512 MB

Output limit: 1 MB