      subroutine ELIM(M,MAG,X)
c     ROZWIAZYWANIE UKLADOW 3-DIAG
c     GAUSS Z CZESCIOWYM WYBOREM
c     MACIERZ DIAGONALAMI W MAG:
c     MAG(.,0),MAG(.,1),MAG(.,2),MAG(.,3)=O
c     PRAWA STRONA MAG(k,4)
c     WYNIK X
      implicit none
      real*8 MAG,ROB,ROC
      real*8 O,E,X
      integer j,k,M
      dimension MAG(0:M,0:4),X(0:M),ROB(0:4),ROC(0:4)

c     STALE
      O=real(0)
      E=real(1)

      do 1,j=0,M-1,1

c     PRZESTAWIANIE
      if(abs(MAG(j,1)).ge.abs(MAG(j+1,0)))then
      goto 30
      else
      do 2,k=0,4,1
      ROB(k)=MAG(j,k)
      ROC(k)=MAG(j+1,k)
    2 continue

      MAG(j,0)=O
      MAG(j,1)=ROC(0)
      MAG(j,2)=ROC(1)
      MAG(j,3)=ROC(2)
      MAG(j,4)=ROC(4)

      MAG(j+1,0)=ROB(1)
      MAG(j+1,1)=ROB(2)
      MAG(j+1,2)=ROB(3)
      MAG(j+1,3)=O
      MAG(j+1,4)=ROB(4)
      endif

c     ELIMINACJA
   30 MAG(j+1,1)=MAG(j+1,1)-MAG(j+1,0)*MAG(j,2)/MAG(j,1)
      MAG(j+1,2)=MAG(j+1,2)-MAG(j+1,0)*MAG(j,3)/MAG(j,1)
      MAG(j+1,3)=O
      MAG(j+1,4)=MAG(j+1,4)-MAG(j+1,0)*MAG(j,4)/MAG(j,1)
      MAG(j+1,0)=O
    1 continue

c     ROZWIAZANIE  UKLADU TROJKATNEGO
      X(M)=MAG(M,4)/MAG(M,1)
      X(M-1)=(MAG(M-1,4)-MAG(M-1,2)*X(M))/MAG(M-1,1)
      do 3,j=M-2,0,-1
      X(j)=(MAG(j,4)-MAG(j,2)*X(j+1)-MAG(j,3)*X(j+2))/MAG(j,1)
    3 continue

      return
      end


