import
java.util.*;
class
GFG
{
static
int
createPalindrome(
int
input,
int
isOdd)
{
int
n = input;
int
palin = input;
if
(isOdd %
2
==
1
)
{
n /=
10
;
}
while
(n >
0
)
{
palin = palin *
10
+ (n %
10
);
n /=
10
;
}
return
palin;
}
static
Vector<Integer> generatePalindromes(
int
N)
{
Vector<Integer> palindromes =
new
Vector<>();
int
number;
for
(
int
j =
0
; j <
2
; j++)
{
int
i =
1
;
while
((number = createPalindrome(i++, j)) <= N)
{
palindromes.add(number);
}
}
return
palindromes;
}
static
String reverse(String input)
{
char
[] temparray = input.toCharArray();
int
left, right =
0
;
right = temparray.length -
1
;
for
(left =
0
; left < right; left++, right--)
{
char
temp = temparray[left];
temparray[left] = temparray[right];
temparray[right] = temp;
}
return
String.valueOf(temparray);
}
static
int
minimumNoOfPalindromes(
int
N)
{
String a = String.valueOf(N);
String b = String.valueOf(N);
b = reverse(b);
if
(a.equals(b))
{
return
1
;
}
Vector<Integer> palindromes = generatePalindromes(N);
Collections.sort(palindromes);
int
l =
0
, r = palindromes.size() -
1
;
while
(l < r)
{
if
(palindromes.get(l) + palindromes.get(r) == N)
{
return
2
;
}
else
if
(palindromes.get(l) + palindromes.get(r) < N)
{
++l;
}
else
{
--r;
}
}
return
3
;
}
public
static
void
main(String[] args)
{
int
N =
65
;
System.out.println(minimumNoOfPalindromes(N));
}
}