3
string nearestPalindromic(string n) {6
// biggest, one more digit, 10...017
candidates.insert(long(pow(10, l)) + 1);8
// smallest, one less digit, 9...9 or 09
candidates.insert(long(pow(10, l - 1)) - 1);10
// the closest must be in middle digit +1, 0, -1, then flip left to right11
long prefix = stol(n.substr(0, (l + 1) / 2));12
for (long i = -1; i <= 1; ++i) {13
string p = to_string(prefix + i);14
string pp = p + string(p.rbegin() + (l & 1), p.rend());15
candidates.insert(stol(pp));17
long num = stol(n), minDiff = LONG_MAX, diff, minVal;18
candidates.erase(num);19
for (long val : candidates) {20
diff = abs(val - num);24
} else if (diff == minDiff) {25
minVal = min(minVal, val);28
return to_string(minVal);