import
java.util.*;
class
GFG {
static
int
Maxx =
100005
;
static
int
N;
static
ArrayList<ArrayList<ArrayList<Integer> > > Graph
=
new
ArrayList<ArrayList<ArrayList<Integer> > >();
static
void
Dijkartas(
int
source)
{
ArrayList<ArrayList<Integer> > PQ
=
new
ArrayList<ArrayList<Integer> >();
ArrayList<Integer> Distance
=
new
ArrayList<Integer>();
for
(
int
i =
0
; i <= N +
1
; i++)
Distance.add(
1000000000
);
ArrayList<Integer> l1 =
new
ArrayList<Integer>();
l1.add(
0
);
l1.add(source);
PQ.add(l1);
int
src = source;
Distance.set(src,
0
);
while
(PQ.size() !=
0
) {
int
current = PQ.get(
0
).get(
1
);
PQ.remove(
0
);
for
(ArrayList<Integer> neighbours :
Graph.get(current)) {
int
v = neighbours.get(
0
);
int
weight = neighbours.get(
1
);
if
(Distance.get(v)
> Distance.get(current) + weight) {
Distance.set(v, Distance.get(current)
+ weight);
ArrayList<Integer> l2
=
new
ArrayList<Integer>();
l2.add(Distance.get(v));
l2.add(v);
PQ.add(l2);
}
}
}
System.out.println(
"Minimum possible sum of digits is "
+ (
1
+ Distance.get(
0
)));
return
;
}
static
void
minSumDigits(
int
N)
{
for
(var i =
1
; i <= N; ++i) {
int
From = (i) % N;
int
To = (i +
1
) % N;
int
Wt =
1
;
ArrayList<ArrayList<Integer> > l1
= Graph.get(From);
ArrayList<Integer> l2
=
new
ArrayList<Integer>();
l2.add(To);
l2.add(Wt);
l1.add(l2);
Graph.set(From, l1);
}
for
(
int
i =
1
; i <= N; ++i) {
int
From = (i) % N;
int
To = (
10
* i) % N;
int
Wt =
0
;
ArrayList<ArrayList<Integer> > l1
= Graph.get(From);
ArrayList<Integer> l2
=
new
ArrayList<Integer>();
l2.add(To);
l2.add(Wt);
l1.add(l2);
Graph.set(From, l1);
}
Dijkartas(
1
);
return
;
}
public
static
void
main(String[] args)
{
N =
19
;
for
(
int
i =
0
; i < Maxx; i++)
Graph.add(
new
ArrayList<ArrayList<Integer> >());
minSumDigits(N);
}
}