#include<bits/stdc++.h>
using namespace std;
string longest(string& s) {
int best=0;
int bestL;
for(int i=0;i<s.size();i++) {
for(int j=0;j<2;j++) {
int l = i, r = i+j;
if(r >= s.size() || s[l] != s[r]) continue;
while(l-1 >= 0 && r+1 < s.size() && s[l-1] == s[r+1]) l--,r++;
if(r-l+1 > best) {
best = r-l+1;
bestL = l;
}
}
}
return s.substr(bestL, best);
}
string longest(vector<string>& str) {
string best;
for(auto& s : str) {
auto ss = longest(s);
if(ss.size() > best.size()) best = ss;
}
return best;
}
int main() {
vector<string> v = {"carracecar", "aabbaa", "aabbbabab"};
cout<<longest(v)<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBsb25nZXN0KHN0cmluZyYgcykgewogICAgaW50IGJlc3Q9MDsKICAgIGludCBiZXN0TDsKICAgIGZvcihpbnQgaT0wO2k8cy5zaXplKCk7aSsrKSB7CiAgICAgICAgZm9yKGludCBqPTA7ajwyO2orKykgewogICAgICAgICAgICBpbnQgbCA9IGksIHIgPSBpK2o7CiAgICAgICAgICAgIGlmKHIgPj0gcy5zaXplKCkgfHwgc1tsXSAhPSBzW3JdKSBjb250aW51ZTsKICAgICAgICAgICAgd2hpbGUobC0xID49IDAgJiYgcisxIDwgcy5zaXplKCkgJiYgc1tsLTFdID09IHNbcisxXSkgbC0tLHIrKzsKICAgICAgICAgICAgaWYoci1sKzEgPiBiZXN0KSB7CiAgICAgICAgICAgICAgICBiZXN0ID0gci1sKzE7CiAgICAgICAgICAgICAgICBiZXN0TCA9IGw7CiAgICAgICAgICAgIH0gICAKICAgICAgICB9ICAgCiAgICB9ICAgCiAgICByZXR1cm4gcy5zdWJzdHIoYmVzdEwsIGJlc3QpOwp9CgpzdHJpbmcgbG9uZ2VzdCh2ZWN0b3I8c3RyaW5nPiYgc3RyKSB7CiAgICBzdHJpbmcgYmVzdDsKICAgIGZvcihhdXRvJiBzIDogc3RyKSB7CiAgICAgICAgYXV0byBzcyA9IGxvbmdlc3Qocyk7CiAgICAgICAgaWYoc3Muc2l6ZSgpID4gYmVzdC5zaXplKCkpIGJlc3QgPSBzczsgCiAgICB9ICAgCiAgICByZXR1cm4gYmVzdDsKfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8c3RyaW5nPiB2ID0geyJjYXJyYWNlY2FyIiwgImFhYmJhYSIsICJhYWJiYmFiYWIifTsKICAgIGNvdXQ8PGxvbmdlc3Qodik8PGVuZGw7Cn0K