code 34136;
    procedure LSQINV(A, M, AID, C); value M; integer M;
    array A, AID; integer array C;
    begin integer I, CI;
       real W;

       for I:= 1 step 1 until M do A[I,I]:= AID[I];
       CHLINV2(A, M);
       for I:= M step - 1 until 1 do 
       begin CI:= C[I]; if CI ^= I then 
          begin ICHCOL(1, I - 1, I, CI, A); ICHROWCOL(I + 1, CI - 1,
             I, CI, A); ICHROW(CI + 1, M, I, CI, A);
             W:= A[I,I]; A[I,I]:= A[CI,CI]; A[CI,CI]:= W
          end 
       end 
    end LSQINV;
        eop