code 34071;
procedure SOLBND(A, N, LW, RW, M, P, B); value N, LW, RW;
integer N, LW, RW; integer array P; array A, B, M;
begin integer F, I, K, KK, W, W1, W2, SHIFT;
        real S;

        F:= LW; SHIFT:= - LW; W1:= LW - 1;
        for K:= 1 step 1 until N do 
        begin if F < N then F:= F + 1; SHIFT:= SHIFT + W1;
            I:=P[K]; S:= B[I]; if I ^= K then 
            begin B[I]:= B[K]; B[K]:= S end;
            ELMVEC(K + 1, F, SHIFT, B, M, - S)
        end;
        W1:= LW + RW; W:= W1 + 1; KK:= (N + 1) * W - W1; W2:= - 1;
        SHIFT:= N * W1;
        for K:= N step - 1 until 1 do 
        begin KK:= KK - W; SHIFT:= SHIFT - W1;
            if W2 < W1 then W2:= W2 + 1;
            B[K]:= (B[K] - VECVEC(K + 1, K + W2, SHIFT, B, A)) / A[KK]
        end 
    end SOLBND;
        eop