c-----------------------------------------------------------
c Chapter 26: The Mobius Function(p233)
c-----------------------------------------------------------
c   Name of subroutine: MOBIUS
c
c   Algorithm:Find mobius matrix from covering relation.
c
c   input:  n=11  
c   complier: f77 mobius_2.f cycles.f triang.f renumb.f invert.f 
c-----------------------------------------------------------

      parameter(n=11)
      integer h(n,n), sigma(n),mu(n,n),sig1(n)
      do 20 i=1,n
      read(*,30) (h(i,j),j=1,n)
30    format (11(i2))
20    continue
      call mobius(n,h,mu,sigma,sig1)
      write(*,35)
35    format("The output matrix is:")
      do 50 i=1,n
      write(*,40) (mu(i,j),j=1,n)
40    format (11(i3))
50    continue
      stop
      end


c-----Subroutine begins here--------------------------------
      subroutine mobius(n,h,mu,sigma,sig1)
      implicit integer(a-z)
      dimension h(n,n),sigma(n),mu(n,n),sig1(n)
      call triang(n,h,sigma)
      do 1 i=1,n
      do 1 j=1,n
1     mu(i,j)=h(i,j)
      call renumb(n,n,sigma,sigma,mu)
      n1=n-1
      do 11  i=1,n1
      j1=i+1
      do 11  j=j1,n
11    mu(i,j)=-mu(i,j)
      call invert(n,mu,mu)
      do 12  i=1,n
      do 12  j=i,n
12    if(mu(i,j).ne.0)mu(i,j)=1
      call invert(n,mu,mu)
      do 20  i=1,n
20    sig1(sigma(i))=i
      call renumb(n,n,sig1,sig1,mu)
      return
      end


