class Solution {
public String nearestPalindromic(String n) {
int len = n.length();
long min = Long.MAX_VALUE;
long ans = 0;
ArrayList<Long> list = new ArrayList<Long>();
StringBuilder sb = new StringBuilder();
String leftHalf = "";
if(len%2 == 0)
leftHalf = n.substring(0,len/2);
else
leftHalf = n.substring(0,len/2+1);
long left = Long.parseLong(leftHalf);
list.add((long)Math.pow(10,len)+1);
list.add((long)Math.pow(10,len)-1);
list.add(generatePalindrome(left+1, len));
list.add(generatePalindrome(left,len));
list.add(generatePalindrome(left-1,len));
list.add((long)Math.pow(10,len-1)+1);
list.add((long)Math.pow(10,len-1)-1);
long num = Long.parseLong(n);
for(long pal:list){
if(Math.abs(pal-num)<=min && pal!=num){
min = Math.abs(pal-num);
ans = pal;
}
}
return Long.toString(ans);
}
public static long generatePalindrome(long left,int len) {
StringBuilder sb = new StringBuilder();
sb.append(left);
StringBuilder reverse = new StringBuilder(sb.toString()).reverse();
if(len%2==0)
sb.append(reverse);
else
sb.append(reverse.substring(1,sb.length()));
return Long.parseLong(sb.toString());
}
}