import
java.util.*;
class
GFG{
static
void
spf_array(
int
spf[],
int
d)
{
spf[
1
] =
1
;
int
i =
0
;
for
(i =
2
; i < d; i++)
{
spf[i] = i;
}
for
(i =
2
; i < d; i = i +
2
)
{
spf[i] =
2
;
}
for
(i =
3
; i * i <= d; i++)
{
if
(spf[i] == i)
{
int
j;
for
(j = i * i; j < d; j = j + i)
{
if
(spf[j] == j)
{
spf[j] = i;
}
}
}
}
}
static
void
closest_prime_spf(
int
spf[],
int
cspf[],
int
d)
{
cspf[
1
] =
1
;
int
i =
0
, k =
0
;
for
(i =
2
; i < d; i++)
{
if
(spf[i] != i)
{
cspf[i] = Math.abs(i - k);
}
else
{
cspf[i] = -
1
;
k = i;
}
}
for
(i = d -
1
; i >=
2
; i--)
{
if
(spf[i] != i)
{
if
(cspf[i] > Math.abs(k - i))
{
cspf[i] = Math.abs(k - i);
}
}
else
{
k = i;
}
}
}
static
int
minimum_operation(
int
cspf[],
String s)
{
HashMap<Character, Integer> m =
new
HashMap<>();
int
i =
0
, k =
0
;
for
(i =
0
; i < s.length(); i++)
{
if
(m.containsKey(s.charAt(i)))
m.put(s.charAt(i),
m.get(s.charAt(i)) +
1
);
else
m.put(s.charAt(i),
1
);
}
for
(Map.Entry<Character,
Integer> x : m.entrySet())
{
int
h = x.getValue();
if
(cspf[h] != -
1
)
{
k = k + cspf[h];
}
}
return
k;
}
static
void
minOper(String s)
{
int
[]spf =
new
int
[s.length() +
1
];
int
[]cspf =
new
int
[s.length() +
1
];
spf_array(spf, s.length() +
1
);
closest_prime_spf(spf, cspf,
s.length() +
1
);
System.out.print(minimum_operation(cspf, s) +
"\n"
);
}
public
static
void
main(String[] args)
{
String s =
"aaaaaaaaabbcccccc"
;
minOper(s);
}
}