code 34134;
    procedure LSQORTDEC(A, N, M, AUX, AID, CI); value N, M;
    integer N, M; array A, AUX, AID; integer array CI;
    begin integer J, K, KPIV;
        real BETA, SIGMA, NORM, W, EPS, AKK, AIDK;
        array SUM[1:M];

        NORM:= 0; AUX[3]:= M;
        for K:= 1 step 1 until M do 
        begin W:= SUM[K]:= TAMMAT(1, N, K, K, A, A);
            if W > NORM then NORM:= W
        end;
        W:= AUX[5]:= SQRT(NORM); EPS:= AUX[2] * W;
        for K:= 1 step 1 until M do 
        begin SIGMA:= SUM[K]; KPIV:= K;
            for J:= K + 1 step 1 until M do 
            if SUM[J] > SIGMA then 
            begin SIGMA:= SUM[J]; KPIV:= J end;
            if KPIV ^= K then 
            begin SUM[KPIV]:= SUM[K]; ICHCOL(1, N, K, KPIV, A) end;
            CI[K]:= KPIV; AKK:= A[K,K];
            SIGMA:= TAMMAT(K, N, K, K, A, A); W:= SQRT(SIGMA);
            AIDK:= AID[K]:= if AKK < 0 then W else - W;
            if W < EPS then 
            begin AUX[3]:= K - 1; "GO TO" ENDDEC end;
            BETA:= 1 / (SIGMA - AKK * AIDK); A[K,K]:= AKK - AIDK;
            for J:= K + 1 step 1 until M do 
            begin ELMCOL(K, N, J, K, A, A, - BETA * TAMMAT(K, N,
                K, J, A, A)); SUM[J]:= SUM[J] - A[K,J] ** 2
            end 
        end FOR K;
    ENDDEC:
    end LSQORTDEC

        eop