Problem:
Score : 700 points

Problem Statement

Find the smallest possible sum of the digits in the decimal notation of a positive multiple of K.

Constraints

2 \leq K \leq 10^5

K is an integer.

Input

Input is given from Standard Input in the following format:

K

Output

Print the smallest possible sum of the digits in the decimal notation of a positive multiple of K.

Sample Input 1

6

Sample Output 1

3

12=6×2 yields the smallest sum.

Sample Input 2

41

Sample Output 2

5

11111=41×271 yields the smallest sum.

Sample Input 3

79992

Sample Output 3

36

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)


import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Main main = new Main();
		main.run();
	}



	public void run() {
		Scanner sc = new Scanner(System.in);
		int k=sc.nextInt();
		ArrayList<ArrayList<Integer>> g0 = new ArrayList<ArrayList<Integer>>();
		ArrayList<ArrayList<Integer>> g1 = new ArrayList<ArrayList<Integer>>();
		for(int i=0; i<k; i++) {
			g0.add(new ArrayList<Integer>());
			g1.add(new ArrayList<Integer>());
		}
		for(int i=1; i<k; i++) {
			g0.get(i).add((i*10)%k);
			g1.get(i).add((i+1)%k);
		}
		ArrayDeque<Integer>deq = new ArrayDeque<Integer>();
		int dist[] = new int[k];
		int INF = 1001001001;
		for(int i=0; i<k; i++) dist[i] = INF;
		dist[1]=1;
		deq.push(1);
		while(!deq.isEmpty()) {
			int u = deq.poll();
			for(int v : g0.get(u)) {
				if(dist[v]>dist[u]) {
					dist[v]=dist[u];
					deq.addFirst(v);
				}
			}
			for(int v : g1.get(u)) {
				if(dist[v]>dist[u]) {
					dist[v] = dist[u]+1;
					deq.addLast(v);
				}
			}
		}
		System.out.println(dist[0]);
		sc.close();
	}

}