fun digits n =
let
val p = n div 10
in
if p=0 then 1
else 1 + digits p
end;
fun sum n =
let
fun dig n =
let
val x = n mod 10
val y = n div 10
in
if x=0 andalso y=0 then 0
else x+(dig y)
end;
in
n + dig n
end;
fun isself i =
let
fun self_aux i x =
if x<i andalso i=(sum x) then 0
else if x<i andalso (i<>sum x) then self_aux i (x+1)
else 1
val tmp = i - 9*(digits i)
in
if tmp<=0 then self_aux i 0
else self_aux i tmp
end;
fun self i j =
if i<=j then (self (i+1) j) + (isself i)
else 0;
val args = CommandLine.arguments ();
val n1 = valOf (Int.fromString (List.nth (args, 0)));
val n2 = valOf (Int.fromString (List.nth (args, 1)));