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 C (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>

#define INF 1000000000

typedef struct{
    int cost;           //ノードのコスト
    char done;          //確定ノード
}Node;

int N;
Node node[100000];

void dijkstra(int g){
    int i, j, k,min;
    for(i = 0; i < N; i++){     //初期化
        node[i].cost = INF;
        node[i].done = 0;
    }
    node[g].cost = 0;           //開始地点のコストは0

    while(1){
        min = INF;
        for(i = 0; i < N; i++){
            if(!node[i].done && min > node[i].cost)min = node[i].cost;
        }
        if(node[0].done==1||min==INF)break;
        for(i = 0; i < N; i++){
            if(node[i].cost == min&&!node[i].done){
                node[i].done=1;
                if(i!=N-1){
                    if(node[i+1].cost > node[i].cost + 1){
                        node[i+1].cost = node[i].cost + 1;
                    }
                }else{
                    if(node[0].cost > node[i].cost + 1){
                        node[0].cost = node[i].cost + 1;
                    }
                }
                if(i){
                    j=(i*10)%N;
                    while(node[j].cost!=node[i].cost){
                        node[j].cost = node[i].cost;
                        j=(j*10)%N;
                    }
                }
            }
        }
    }
}

int main()
{
    scanf("%d",&N);
    int i,j;
    dijkstra(1);

    printf("%d\n",node[0].cost+1);
    return 0;
}