#include <algorithm>
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
int main()
{
std::cout << "Superior code written in the superior C++ language by the superior Enforcer." << std::endl;
const std::clock_t startClocks = std::clock();
const std::string input = "FourscoreandsevenyearsagoourfaathersbroughtforthonthiscontainentanewnationconceivedinzLibertyanddedicatedtothepropositionthatallmenarecreatedequalNowweareengagedinagreahtcivilwartestingwhetherthatnaptionoranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatbattlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinalrestingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItisaltogetherfangandproperthatweshoulddothisButinalargersensewecannotdedicatewecannotconsecratewecannothallowthisgroundThebravelmenlivinganddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddordetractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitcanneverforgetwhattheydidhereItisforusthelivingrathertobededicatedheretotheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvancedItisratherforustobeherededicatedtothegreattdafskremainingbeforeusthatfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheygavethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedeadshallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffreedomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperishfromtheearth";
const std::string reversed = [&] () -> std::string { std::string reversed = input; std::reverse(reversed.begin(), reversed.end()); return reversed; }();
const std::size_t length = input.length();
const std::string::const_iterator iteratorInput = input.cbegin();
const std::string::const_iterator iteratorReversed = reversed.end();
std::string result;
for (std::size_t i = 0, longest = 0; length - i > longest; ++i)
{
for (std::size_t j = i + longest; j < length + 1; ++j)
{
if (std::equal(iteratorInput + i, iteratorInput + j, iteratorReversed - j))
{
result = std::string(iteratorInput + i, iteratorInput + j);
longest = j - i;
}
}
}
const std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Result: " << result << "." << std::endl;
std::cout << "Time taken: " << (clocksTaken * 1000 / CLOCKS_PER_SEC) << "ms." << std::endl;
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgoKaW50IG1haW4oKQp7CglzdGQ6OmNvdXQgPDwgIlN1cGVyaW9yIGNvZGUgd3JpdHRlbiBpbiB0aGUgc3VwZXJpb3IgQysrIGxhbmd1YWdlIGJ5IHRoZSBzdXBlcmlvciBFbmZvcmNlci4iIDw8IHN0ZDo6ZW5kbDsJCgljb25zdCBzdGQ6OmNsb2NrX3Qgc3RhcnRDbG9ja3MgPSBzdGQ6OmNsb2NrKCk7Cgljb25zdCBzdGQ6OnN0cmluZyBpbnB1dCA9ICJGb3Vyc2NvcmVhbmRzZXZlbnllYXJzYWdvb3VyZmFhdGhlcnNicm91Z2h0Zm9ydGhvbnRoaXNjb250YWluZW50YW5ld25hdGlvbmNvbmNlaXZlZGluekxpYmVydHlhbmRkZWRpY2F0ZWR0b3RoZXByb3Bvc2l0aW9udGhhdGFsbG1lbmFyZWNyZWF0ZWRlcXVhbE5vd3dlYXJlZW5nYWdlZGluYWdyZWFodGNpdmlsd2FydGVzdGluZ3doZXRoZXJ0aGF0bmFwdGlvbm9yYW55bmFydGlvbnNvY29uY2VpdmVkYW5kc29kZWRpY2F0ZWRjYW5sb25nZW5kdXJlV2VhcmVxbWV0b25hZ3JlYXRiYXR0bGVmaWVtbGRvZnR6aGF0d2FyV2VoYXZlY29tZXRvZGVkaWNwYXRlYXBvcnRpb25vZnRoYXRmaWVsZGFzYWZpbmFscmVzdGluZ3BsYWNlZm9ydGhvc2V3aG9oZXJlZ2F2ZXRoZWlybGl2ZXN0aGF0dGhhdG5hdGlvbm1pZ2h0bGl2ZUl0aXNhbHRvZ2V0aGVyZmFuZ2FuZHByb3BlcnRoYXR3ZXNob3VsZGRvdGhpc0J1dGluYWxhcmdlcnNlbnNld2VjYW5ub3RkZWRpY2F0ZXdlY2Fubm90Y29uc2VjcmF0ZXdlY2Fubm90aGFsbG93dGhpc2dyb3VuZFRoZWJyYXZlbG1lbmxpdmluZ2FuZGRlYWR3aG9zdHJ1Z2dsZWRoZXJlaGF2ZWNvbnNlY3JhdGVkaXRmYXJhYm92ZW91cnBvb3Jwb253ZXJ0b2FkZG9yZGV0cmFjdFRnaGV3b3JsZGFkc3dmaWxsbGl0dGxlbm90bGVub3Jsb25ncmVtZW1iZXJ3aGF0d2VzYXloZXJlYnV0aXRjYW5uZXZlcmZvcmdldHdoYXR0aGV5ZGlkaGVyZUl0aXNmb3J1c3RoZWxpdmluZ3JhdGhlcnRvYmVkZWRpY2F0ZWRoZXJldG90aGV1bG5maW5pc2hlZHdvcmt3aGljaHRoZXl3aG9mb3VnaHRoZXJlaGF2ZXRodXNmYXJzb25vYmx5YWR2YW5jZWRJdGlzcmF0aGVyZm9ydXN0b2JlaGVyZWRlZGljYXRlZHRvdGhlZ3JlYXR0ZGFmc2tyZW1haW5pbmdiZWZvcmV1c3RoYXRmcm9tdGhlc2Vob25vcmVkZGVhZHdldGFrZWluY3JlYXNlZGRldm90aW9udG90aGF0Y2F1c2Vmb3J3aGljaHRoZXlnYXZldGhlbGFzdHBmdWxsbWVhc3VyZW9mZGV2b3Rpb250aGF0d2VoZXJlaGlnaGx5cmVzb2x2ZXRoYXR0aGVzZWRlYWRzaGFsbG5vdGhhdmVkaWVkaW52YWludGhhdHRoaXNuYXRpb251bnNkZXJHb2RzaGFsbGhhdmVhbmV3YmlydGhvZmZyZWVkb21hbmR0aGF0Z292ZXJubWVudG9mdGhlcGVvcGxlYnl0aGVwZW9wbGVmb3J0aGVwZW9wbGVzaGFsbG5vdHBlcmlzaGZyb210aGVlYXJ0aCI7Cgljb25zdCBzdGQ6OnN0cmluZyByZXZlcnNlZCA9IFsmXSAoKSAtPiBzdGQ6OnN0cmluZyB7IHN0ZDo6c3RyaW5nIHJldmVyc2VkID0gaW5wdXQ7IHN0ZDo6cmV2ZXJzZShyZXZlcnNlZC5iZWdpbigpLCByZXZlcnNlZC5lbmQoKSk7IHJldHVybiByZXZlcnNlZDsgfSgpOwoJY29uc3Qgc3RkOjpzaXplX3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7Cgljb25zdCBzdGQ6OnN0cmluZzo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3JJbnB1dCA9IGlucHV0LmNiZWdpbigpOwoJY29uc3Qgc3RkOjpzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yUmV2ZXJzZWQgPSByZXZlcnNlZC5lbmQoKTsKCXN0ZDo6c3RyaW5nIHJlc3VsdDsKCglmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwLCBsb25nZXN0ID0gMDsgbGVuZ3RoIC0gaSA+IGxvbmdlc3Q7ICsraSkKCXsKCQlmb3IgKHN0ZDo6c2l6ZV90IGogPSBpICsgbG9uZ2VzdDsgaiA8IGxlbmd0aCArIDE7ICsraikKCQl7CgkJCWlmIChzdGQ6OmVxdWFsKGl0ZXJhdG9ySW5wdXQgKyBpLCBpdGVyYXRvcklucHV0ICsgaiwgaXRlcmF0b3JSZXZlcnNlZCAtIGopKQoJCQl7CgkJCQlyZXN1bHQgPSBzdGQ6OnN0cmluZyhpdGVyYXRvcklucHV0ICsgaSwgaXRlcmF0b3JJbnB1dCArIGopOwoJCQkJbG9uZ2VzdCA9IGogLSBpOwoJCQl9CgkJfQoJfQoKCWNvbnN0IHN0ZDo6Y2xvY2tfdCBjbG9ja3NUYWtlbiA9IHN0ZDo6Y2xvY2soKSAtIHN0YXJ0Q2xvY2tzOwoJc3RkOjpjb3V0IDw8ICJSZXN1bHQ6ICIgPDwgcmVzdWx0IDw8ICIuIiA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIlRpbWUgdGFrZW46ICIgPDwgKGNsb2Nrc1Rha2VuICogMTAwMCAvIENMT0NLU19QRVJfU0VDKSA8PCAibXMuIiA8PCBzdGQ6OmVuZGw7CiAgICAKICAgICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9