import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
public
class
ClosestPalindrome {
public
static
String closestPalindrome(String n) {
List<Long> candidates =
new
ArrayList<>();
int
length = n.length();
int
mid = (length +
1
) /
2
;
if
(length ==
1
) {
long
num = Long.parseLong(n);
return
String.valueOf(num -
1
);
}
candidates.add((
long
) Math.pow(
10
, length) +
1
);
candidates.add((
long
) Math.pow(
10
, length -
1
) -
1
);
int
prefix = Integer.parseInt(n.substring(
0
, mid));
List<Integer> temp = Arrays.asList(prefix, prefix +
1
, prefix -
1
);
for
(
int
i : temp) {
String res = String.valueOf(i);
if
((length &
1
) !=
0
) {
res = res.substring(
0
, res.length() -
1
);
}
String peep = i +
new
StringBuilder(res).reverse().toString();
candidates.add(Long.parseLong(peep));
}
long
minDiff = Long.MAX_VALUE;
long
result = Long.parseLong(n);
long
tip = Long.parseLong(n);
for
(
int
i =
0
; i <
5
; i++) {
long
candidate = candidates.get(i);
if
(candidate != tip && minDiff > Math.abs(candidate - tip)) {
result = candidate;
minDiff = Math.abs(candidate - tip);
}
else
if
(Math.abs(candidate - tip) == minDiff) {
result = Math.min(result, candidate);
}
}
return
String.valueOf(result);
}
public
static
void
main(String[] args) {
String num =
"489"
;
System.out.println(closestPalindrome(num));
}
}