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 OCaml (4.02.3) (judge verdict: Accepted)


module M = Set.Make(struct
  type t = int * int
  let compare = compare
end)

let () =
  Scanf.scanf "%d" @@ fun k ->
  let (+%) a b = (a + b) mod k in
  let ( *%) a b = (a * b) mod k in

  let a = Array.make k k in
  a.(1) <- 1;
  let rec loop pq =
    if M.is_empty pq then () else begin
      let (d, m) = M.min_elt pq in
      let pq' = M.remove (d, m) pq in
      if d > a.(m) then loop pq' else
      [(d+1, m+%1); (d, m *% 10)] |> List.fold_left (fun q (d',m') ->
        if d' < a.(m') then begin
          a.(m') <- d';
          M.add (d', m') q
        end else q
      ) pq' |> loop
    end
  in
  loop (M.singleton (1, 1));
  Printf.printf "%d\n" a.(0)