#include<bits/stdc++.h>
using namespace std;
bool palindrome(string s) {
for (int i = 0; i < s.size() / 2; i++) {
if (s[i] != s[s.size() - 1 - i]) return false;
}
return true;
}
vector<vector<string>> res;
vector<string> v;
void Try(int start, string s) {
if (start >= s.size()) {
res.push_back(v);
return; // Return here to stop further recursion
}
for (int end = start; end < s.size(); end++) {
if (palindrome(s.substr(start, end - start + 1))) {
v.push_back(s.substr(start, end - start + 1));
Try(end + 1, s);
v.pop_back();
}
}
}
int main() {
string s;
cin >> s;
Try(0, s); // Call Try function to generate palindromic partitions
for (auto it : res) {
for (string x : it) {
cout << x << " ";
}
cout << endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgcGFsaW5kcm9tZShzdHJpbmcgcykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKSAvIDI7IGkrKykgewogICAgICAgIGlmIChzW2ldICE9IHNbcy5zaXplKCkgLSAxIC0gaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgp2ZWN0b3I8dmVjdG9yPHN0cmluZz4+IHJlczsKdmVjdG9yPHN0cmluZz4gdjsKCnZvaWQgVHJ5KGludCBzdGFydCwgc3RyaW5nIHMpIHsKICAgIGlmIChzdGFydCA+PSBzLnNpemUoKSkgewogICAgICAgIHJlcy5wdXNoX2JhY2sodik7CiAgICAgICAgcmV0dXJuOyAvLyBSZXR1cm4gaGVyZSB0byBzdG9wIGZ1cnRoZXIgcmVjdXJzaW9uCiAgICB9CiAgICBmb3IgKGludCBlbmQgPSBzdGFydDsgZW5kIDwgcy5zaXplKCk7IGVuZCsrKSB7CiAgICAgICAgaWYgKHBhbGluZHJvbWUocy5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSkpKSB7CiAgICAgICAgICAgIHYucHVzaF9iYWNrKHMuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpKTsKICAgICAgICAgICAgVHJ5KGVuZCArIDEsIHMpOwogICAgICAgICAgICB2LnBvcF9iYWNrKCk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHN0cmluZyBzOwogICAgY2luID4+IHM7CiAgICBUcnkoMCwgcyk7IC8vIENhbGwgVHJ5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHBhbGluZHJvbWljIHBhcnRpdGlvbnMKICAgIGZvciAoYXV0byBpdCA6IHJlcykgewogICAgICAgIGZvciAoc3RyaW5nIHggOiBpdCkgewogICAgICAgICAgICBjb3V0IDw8IHggPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=