Scanf.scanf "%d %d" (fun a n -> let z = 1000000007 in let ( *@) a b = (a * b) mod z in let pow a b = let rec loop r i acc = if i = 0 then acc else loop (r *@ r) (i lsr 1) (if i land 1 = 0 then acc else acc *@ r) in loop a b 1 in Printf.printf "%d\n%d\n" z (pow a n) )