code 34300;
procedure DEC(A, N, AUX, P); value N; integer N;
array A, AUX; integer array P;
begin integer I, K, K1, PK, D;
real R, S, EPS;
array V[1:N];
R:= -1;
for I:= 1 step 1 until N do
begin S:= SQRT(MATTAM(1,N,I,I,A,A));
if S > R then R:= S; V[I]:= 1/S
end;
EPS:= AUX[2] * R; D:= 1;
for K:= 1 step 1 until N do
begin R:= - 1; K1:= K - 1;
for I:= K step 1 until N do
begin A[I,K]:= A[I,K] - MATMAT(1, K1, I, K, A, A);
S:= ABS(A[I,K]) * V[I]; if S > R then
begin R:= S; PK:= I end
end LOWER;
P[K]:= PK; V[PK]:= V[K]; S:= A[PK,K];
if ABS(S) < EPS then goto END;
if S < 0 then D:= -D; if PK ^= K then
begin D:= - D; ICHROW(1, N, K, PK, A) end;
for I:= K + 1 step 1 until N do
A[K,I]:= (A[K,I] - MATMAT(1, K1, K, I, A, A)) / S
end LU;
K:= N + 1;
END: AUX[1]:= D; AUX[3]:= K - 1
end DEC;
eop