code 31204;
procedure LNG INT POWER(U,EXPONENT,RESULT);
value EXPONENT; integer EXPONENT; integer array U,RESULT;
begin integer MAX,I,N;
   MAX:=U[0] * EXPONENT;
   begin integer array Y,Z,H[0:MAX];
      comment Y:=1, Z:=U;
      Y[0]:=Y[1]:=1;
      for I:=U[0] step -1 until 0 do Z[I]:=U[I];
   HALVE: N:=EXPONENT//2; if N+N=EXPONENT then goto SQUARE Z;
      LNG INT MULT(Y,Z,H);
      for I:=H[0] step -1 until 0 do Y[I]:=H[I];
      if N=0 then goto READY;
   SQUARE Z: LNG INT MULT(Z,Z,H);
      for I:=H[0] step -1 until 0 do Z[I]:=H[I];
      EXPONENT:=N; goto HALVE;
   READY: for I:=Y[0] step -1 until 0 do RESULT[I]:=Y[I]
   end 
end LNG INT POWER;
        eop