program principal
use indir_mod
use gausspiv_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 gausspiv(a, b, ip, det)
call sistuspf(a, b, u, ip)
print*, u(1:n)
call residuo(aa, bb, u)
print*, bb(1:n)
deallocate (a, aa, b, bb, u, ip)
stop
end program principal