#include <iostream>
using namespace std;
bool isPalindrome(const string& s, int l, int r) {
while (l < r) {
if (s[l++] != s[r--])
return false;
}
return true;
}
bool check(const string& a, const string& b) {
int l = 0, r = a.size() - 1;
while (l < r && a[l] == b[r]) {
l++;
r--;
}
return isPalindrome(a, l, r) || isPalindrome(b, l, r);
}
bool checkPalindromeFormation(string a, string b) {
return check(a, b) || check(b, a);
}
int main() {
string a = "abdef";
string b = "fecab";
if (checkPalindromeFormation(a, b))
cout << "Yes, a palindrome can be formed!" << endl;
else
cout << "No palindrome possible from any split." << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc1BhbGluZHJvbWUoY29uc3Qgc3RyaW5nJiBzLCBpbnQgbCwgaW50IHIpIHsKICAgIHdoaWxlIChsIDwgcikgewogICAgICAgIGlmIChzW2wrK10gIT0gc1tyLS1dKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKCmJvb2wgY2hlY2soY29uc3Qgc3RyaW5nJiBhLCBjb25zdCBzdHJpbmcmIGIpIHsKICAgIGludCBsID0gMCwgciA9IGEuc2l6ZSgpIC0gMTsKICAgIHdoaWxlIChsIDwgciAmJiBhW2xdID09IGJbcl0pIHsKICAgICAgICBsKys7CiAgICAgICAgci0tOwogICAgfQogICAgcmV0dXJuIGlzUGFsaW5kcm9tZShhLCBsLCByKSB8fCBpc1BhbGluZHJvbWUoYiwgbCwgcik7Cn0KCmJvb2wgY2hlY2tQYWxpbmRyb21lRm9ybWF0aW9uKHN0cmluZyBhLCBzdHJpbmcgYikgewogICAgcmV0dXJuIGNoZWNrKGEsIGIpIHx8IGNoZWNrKGIsIGEpOwp9CgppbnQgbWFpbigpIHsKICAgIHN0cmluZyBhID0gImFiZGVmIjsKICAgIHN0cmluZyBiID0gImZlY2FiIjsKCiAgICBpZiAoY2hlY2tQYWxpbmRyb21lRm9ybWF0aW9uKGEsIGIpKQogICAgICAgIGNvdXQgPDwgIlllcywgYSBwYWxpbmRyb21lIGNhbiBiZSBmb3JtZWQhIiA8PCBlbmRsOwogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIk5vIHBhbGluZHJvbWUgcG9zc2libGUgZnJvbSBhbnkgc3BsaXQuIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==