alpha2num:=proc(x) if x=`A` then RETURN(0,1); fi: if x=`B` then RETURN(0,2); fi: if x=`C` then RETURN(0,3); fi: if x=`D` then RETURN(0,4); fi: if x=`E` then RETURN(0,5); fi: if x=`F` then RETURN(0,6); fi: if x=`G` then RETURN(0,7); fi: if x=`H` then RETURN(0,8); fi: if x=`I` then RETURN(0,9); fi: if x=`J` then RETURN(1,0); fi: if x=`K` then RETURN(1,1); fi: if x=`L` then RETURN(1,2); fi: if x=`M` then RETURN(1,3); fi: if x=`N` then RETURN(1,4); fi: if x=`O` then RETURN(1,5); fi: if x=`P` then RETURN(1,6); fi: if x=`Q` then RETURN(1,7); fi: if x=`R` then RETURN(1,8); fi: if x=`S` then RETURN(1,9); fi: if x=`T` then RETURN(2,0); fi: if x=`U` then RETURN(2,1); fi: if x=`V` then RETURN(2,2); fi: if x=`W` then RETURN(2,3); fi: if x=`X` then RETURN(2,4); fi: if x=`Y` then RETURN(2,5); fi: if x=`Z` then RETURN(2,6); fi: if x=`SP` then RETURN(0,0); fi: end: string2list:=proc(L) RETURN(map(alpha2num,L)): end: numlist2numstring:=proc(L) local OL: OL:=op(L): RETURN(cat(OL)): end: list2dec:=proc(L) local x,i,num: x:=0: num:=nops(L): for i from 1 to num do x:=x + L[i]*10^(num-i): od: RETURN(x): end: numstring2num:=proc(nummess) local x,leng,i,digs,dign: x:=0: leng:=length(nummess): for i from 1 to leng do digs:=substring(nummess,i..i): dign:=subs({`0`=0,`1`=1,`2`=2,`3`=3,`4`=4, `5`=5,`6`=6,`7`=7,`8`=8,`9`=9},digs): x:=x+10^(leng-i)*dign: od: RETURN(x): end: POWERMOD:=proc(a,N,M) local j,Q,Y,n,b: j:=1: Q:=1: Y:=1: n:=N: while n>0 do if modp(n,2)=1 then b:=1: if n=N then Q:=a: Y:=a: else Q:=modp(Q^2,M): Y:=modp(Q*Y,M): fi: else b:=0: if n=N then Q:=a: else Q:=modp(Q^2,M): fi: fi: n:=trunc(n/2): od: RETURN(Y); end: