program ModPow; a := 2988348162058574136915891421498819466320163312926952423791023078876139; b := 2351399303373464486466122544523690094744975233415544072992656881240319; print(modpow(a, b, 10**40)); proc modpow(b, e, m); r := 1; loop init r := 1; step e div:= 2; until e = 0 do if e mod 2 = 1 then r := (b * r) mod m; end if; b := (b * b) mod m; end; return r; end proc; end program;