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