#include <iostream>
#include <string>
#include <regex>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> NearestPalindromeNumbers(string &s)
{
string x(s), y(s), z(s);
int k = s.length();
int j = k / 2;
int i = k - j;
if (regex_match(s, regex("^10+$"))) return {string(k - 1, '9'), (y[k - 1]++, y)};
reverse_copy(&x[0], &x[j], &x[i]);
if (x == s) return {x};
bool ascending = x < s;
char r = 1;
if (ascending) {
for_each(y.rend() - i, y.rend(), [&r](char &y) {if (r) if (r = ++y > '9') y = '0';});
} else {
for_each(y.rend() - i, y.rend(), [&r](char &y) {if (r) if (r = --y < '0') y = '9';});
}
reverse_copy(&y[0], &y[j], &y[i]);
transform(x.rbegin(), x.rend(), y.rbegin(), z.rbegin(), [&r](char &x, char &y) {
char z = x + y + r;
return (r = z > '0' + '9') ? z -= 10 : z;
});
for (char &z : z) r = (z += 10 * r) % 2, z /= 2;
string &a = ascending ? x : y, &b = ascending ? y : x;
int d = strcmp(&s[0], &z[0]);
if (!r && !d) return {a, b};
return {d <= 0 ? a : b};
}
string q[] = {"0", "5", "17", "100", "2024", "12345679042654321", "31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"};
int main(void)
{
for (auto &s : q) {
auto v = NearestPalindromeNumbers(s);
for (auto &x : v) cout << (&x == &v[0] ? "[" : ", ") << x;
cout << "]" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPHN0cmluZz4gTmVhcmVzdFBhbGluZHJvbWVOdW1iZXJzKHN0cmluZyAmcykKewogICAgc3RyaW5nIHgocyksIHkocyksIHoocyk7CgogICAgaW50IGsgPSBzLmxlbmd0aCgpOwogICAgaW50IGogPSBrIC8gMjsKICAgIGludCBpID0gayAtIGo7CgogICAgaWYgKHJlZ2V4X21hdGNoKHMsIHJlZ2V4KCJeMTArJCIpKSkgcmV0dXJuIHtzdHJpbmcoayAtIDEsICc5JyksICh5W2sgLSAxXSsrLCB5KX07CgogICAgcmV2ZXJzZV9jb3B5KCZ4WzBdLCAmeFtqXSwgJnhbaV0pOwogICAgaWYgKHggPT0gcykgcmV0dXJuIHt4fTsKCiAgICBib29sIGFzY2VuZGluZyA9IHggPCBzOwogICAgY2hhciByID0gMTsKICAgIGlmIChhc2NlbmRpbmcpIHsKICAgICAgICBmb3JfZWFjaCh5LnJlbmQoKSAtIGksIHkucmVuZCgpLCBbJnJdKGNoYXIgJnkpIHtpZiAocikgaWYgKHIgPSArK3kgPiAnOScpIHkgPSAnMCc7fSk7CiAgICB9IGVsc2UgewogICAgICAgIGZvcl9lYWNoKHkucmVuZCgpIC0gaSwgeS5yZW5kKCksIFsmcl0oY2hhciAmeSkge2lmIChyKSBpZiAociA9IC0teSA8ICcwJykgeSA9ICc5Jzt9KTsKICAgIH0KICAgIHJldmVyc2VfY29weSgmeVswXSwgJnlbal0sICZ5W2ldKTsKCiAgICB0cmFuc2Zvcm0oeC5yYmVnaW4oKSwgeC5yZW5kKCksIHkucmJlZ2luKCksIHoucmJlZ2luKCksIFsmcl0oY2hhciAmeCwgY2hhciAmeSkgewogICAgICAgIGNoYXIgeiA9IHggKyB5ICsgcjsKICAgICAgICByZXR1cm4gKHIgPSB6ID4gJzAnICsgJzknKSA/IHogLT0gMTAgOiB6OwogICAgfSk7CiAgICBmb3IgKGNoYXIgJnogOiB6KSByID0gKHogKz0gMTAgKiByKSAlIDIsIHogLz0gMjsKCiAgICBzdHJpbmcgJmEgPSBhc2NlbmRpbmcgPyB4IDogeSwgJmIgPSBhc2NlbmRpbmcgPyB5IDogeDsKCiAgICBpbnQgZCA9IHN0cmNtcCgmc1swXSwgJnpbMF0pOwogICAgaWYgKCFyICYmICFkKSByZXR1cm4ge2EsIGJ9OwogICAgcmV0dXJuIHtkIDw9IDAgPyBhIDogYn07Cn0KCnN0cmluZyBxW10gPSB7IjAiLCAiNSIsICIxNyIsICIxMDAiLCAiMjAyNCIsICIxMjM0NTY3OTA0MjY1NDMyMSIsICIzMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OSJ9OwoKaW50IG1haW4odm9pZCkKewogICAgZm9yIChhdXRvICZzIDogcSkgewogICAgICAgIGF1dG8gdiA9IE5lYXJlc3RQYWxpbmRyb21lTnVtYmVycyhzKTsKICAgICAgICBmb3IgKGF1dG8gJnggOiB2KSBjb3V0IDw8ICgmeCA9PSAmdlswXSA/ICJbIiA6ICIsICIpIDw8IHg7CiAgICAgICAgY291dCA8PCAiXSIgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9