code 34053;
    procedure INV(A, N, P); value N; integer N; array A;
    integer array P;
    begin integer J, K, K1;
        real R;
        array V[1:N];
        for K:= N step - 1 until 1 do 
        begin K1:= K + 1;
            for J:= N step - 1 until K1 do 
            begin A[J,K1]:= V[J];
                V[J]:= - MATMAT(K1, N, K, J, A, A)
            end;
            R:= A[K,K];
            for J:= N step - 1 until K1 do 
            begin A[K,J]:= V[J];
                V[J]:= - MATMAT(K1, N, J, K, A, A) / R
            end;
            V[K]:= (1 - MATMAT(K1, N, K, K, A, A)) / R
        end;
        DUPCOLVEC(1, N, 1, A, V);
        for K:= N - 1 step - 1 until 1 do 
        begin K1:= P[K]; if K1 ^= K then 
            ICHCOL(1, N, K, K1, A)
        end 
    end INV;
        eop