#include <algorithm>
#include <iostream>
#include <iterator>
#include <numeric>
using namespace std;
int main() {
int inputs[899];
int max[2] = { 0, 0 };
auto max_product = 0;
iota(begin(inputs), end(inputs), 100);
for(auto it = crbegin(inputs); it != crend(inputs) && *it * *it > max_product; ++it) {
const auto rhs = find_if(it, crend(inputs), [lhs = *it](const auto rhs){
const auto input = to_string(lhs * rhs);
return equal(cbegin(input), next(cbegin(input), input.size() / 2U), crbegin(input));
});
if(crend(inputs) != rhs){
const auto product = *it * *rhs;
if(product > max_product) {
max_product = product;
max[0] = *it;
max[1] = *rhs;
}
}
}
cout << max[0] << " * " << max[1] << " = " << max_product << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxudW1lcmljPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJaW50IGlucHV0c1s4OTldOwoJaW50IG1heFsyXSA9IHsgMCwgMCB9OwoJYXV0byBtYXhfcHJvZHVjdCA9IDA7CgkKCWlvdGEoYmVnaW4oaW5wdXRzKSwgZW5kKGlucHV0cyksIDEwMCk7CgkKCWZvcihhdXRvIGl0ID0gY3JiZWdpbihpbnB1dHMpOyBpdCAhPSBjcmVuZChpbnB1dHMpICYmICppdCAqICppdCA+IG1heF9wcm9kdWN0OyArK2l0KSB7CgkJY29uc3QgYXV0byByaHMgPSBmaW5kX2lmKGl0LCBjcmVuZChpbnB1dHMpLCBbbGhzID0gKml0XShjb25zdCBhdXRvIHJocyl7CgkJCWNvbnN0IGF1dG8gaW5wdXQgPSB0b19zdHJpbmcobGhzICogcmhzKTsKCQkJCgkJCXJldHVybiBlcXVhbChjYmVnaW4oaW5wdXQpLCBuZXh0KGNiZWdpbihpbnB1dCksIGlucHV0LnNpemUoKSAvIDJVKSwgY3JiZWdpbihpbnB1dCkpOwoJCX0pOwoJICAKCQlpZihjcmVuZChpbnB1dHMpICE9ICByaHMpewoJCQljb25zdCBhdXRvIHByb2R1Y3QgPSAqaXQgKiAqcmhzOwoJCQkKCQkJaWYocHJvZHVjdCA+IG1heF9wcm9kdWN0KSB7CgkJCQltYXhfcHJvZHVjdCA9IHByb2R1Y3Q7CgkJCQltYXhbMF0gPSAqaXQ7CgkJCQltYXhbMV0gPSAqcmhzOwoJCQl9CgkJfQoJfQoJY291dCA8PCBtYXhbMF0gPDwgIiAqICIgPDwgbWF4WzFdIDw8ICIgPSAiIDw8IG1heF9wcm9kdWN0IDw8IGVuZGw7Cn0=