#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
long long *NearestPalindromeNumbers(long long n)
{
char s[32];
static long long x[3];
int k = sprintf(s, "%lld", n);
int j = k / 2;
int i = k - j;
strncpy(s + i, s, j)[j] = 0;
std::reverse(s + i, s + k);
x[0] = atoll(s);
if (x[0] == n) return x[1] = -1, x;
s[i] = 0;
k = sprintf(s, "%lld", atoll(s) + (x[0] < n ? 1 : -1));
if (strcmp(s, "0") == 0) strcpy(s, "9"), j--;
if (k < i) strcat(s, "9"), j--;
strncpy(s + i, s, j)[j] = 0;
std::reverse(s + i, s + i + j);
x[1] = atoll(s);
long long d = abs(x[0] - n) - abs(x[1] - n);
if (d < 0) return x[1] = -1, x;
if (d > 0) return x[2] = -1, x + 1;
return x[0] < x[1] ? x : (x[2] = x[0], x + 1);
}
int main(void)
{
long long q[] = {0, 5, 10, 17, 100, 1000, 2024, 12345679042654321};
for (int i = 0; i < sizeof(q) / sizeof(*q); i++) {
long long *x = NearestPalindromeNumbers(q[i]);
for (int j = 0; j < 2; j++) if (x[j] >= 0) printf("%s%lld", j ? ", " : "[", x[j]);
printf("]\n");
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKbG9uZyBsb25nICpOZWFyZXN0UGFsaW5kcm9tZU51bWJlcnMobG9uZyBsb25nIG4pCnsKICAgIGNoYXIgc1szMl07CiAgICBzdGF0aWMgbG9uZyBsb25nIHhbM107CgogICAgaW50IGsgPSBzcHJpbnRmKHMsICIlbGxkIiwgbik7CiAgICBpbnQgaiA9IGsgLyAyOwogICAgaW50IGkgPSBrIC0gajsKICAgIHN0cm5jcHkocyArIGksIHMsIGopW2pdID0gMDsKICAgIHN0ZDo6cmV2ZXJzZShzICsgaSwgcyArIGspOwogICAgeFswXSA9IGF0b2xsKHMpOwogICAgaWYgKHhbMF0gPT0gbikgcmV0dXJuIHhbMV0gPSAtMSwgeDsKCiAgICBzW2ldID0gMDsKICAgIGsgPSBzcHJpbnRmKHMsICIlbGxkIiwgYXRvbGwocykgKyAoeFswXSA8IG4gPyAxIDogLTEpKTsKICAgIGlmIChzdHJjbXAocywgIjAiKSA9PSAwKSBzdHJjcHkocywgIjkiKSwgai0tOwogICAgaWYgKGsgPCBpKSBzdHJjYXQocywgIjkiKSwgai0tOwogICAgc3RybmNweShzICsgaSwgcywgailbal0gPSAwOwogICAgc3RkOjpyZXZlcnNlKHMgKyBpLCBzICsgaSArIGopOwogICAgeFsxXSA9IGF0b2xsKHMpOwoKICAgIGxvbmcgbG9uZyBkID0gYWJzKHhbMF0gLSBuKSAtIGFicyh4WzFdIC0gbik7CiAgICBpZiAoZCA8IDApIHJldHVybiB4WzFdID0gLTEsIHg7CiAgICBpZiAoZCA+IDApIHJldHVybiB4WzJdID0gLTEsIHggKyAxOwogICAgcmV0dXJuIHhbMF0gPCB4WzFdID8geCA6ICh4WzJdID0geFswXSwgeCArIDEpOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBsb25nIGxvbmcgcVtdID0gezAsIDUsIDEwLCAxNywgMTAwLCAxMDAwLCAyMDI0LCAxMjM0NTY3OTA0MjY1NDMyMX07CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocSkgLyBzaXplb2YoKnEpOyBpKyspIHsKICAgICAgICBsb25nIGxvbmcgKnggPSBOZWFyZXN0UGFsaW5kcm9tZU51bWJlcnMocVtpXSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyBqKyspIGlmICh4W2pdID49IDApIHByaW50ZigiJXMlbGxkIiwgaiA/ICIsICIgOiAiWyIsIHhbal0pOwogICAgICAgIHByaW50ZigiXVxuIik7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=