program principal
use indir_mod
use lupiv_mod
use sistlspf_mod
use sistuspf_mod
use residuo_mod
implicit none
real(8), allocatable :: a(:,:), aa(:,:), b(:), bb(:), u(:)
integer, allocatable :: ip(:)
real(8) :: det
integer :: n, i
read*, n
allocate (a(n,n), aa(n,n), b(n), bb(n), ip(n), u(n))
call indir(a, b)
do i = 1, n
aa(i,1:n) = a(i,1:n)
bb(i) = b(i)
end do
call lupiv(a, ip, det)
call sistlspf(a, b, u, ip)
do i = 1, n
b(i) = u(i)
end do
call sistuspf(a, b, ip)
print*, b(1:n)
call residuo(aa, bb, b)
print*, bb(1:n)
deallocate (a, aa, b, bb, u, ip)
stop
end program principal