program assign3_1
implicit none
integer :: i
real,parameter :: f=0
real, allocatable :: a(:,:),b(:),c(:),d(:,:),e(:,:)
logical,allocatable :: m(:,:)
allocate(a(2,2),b(2),c(4),d(2,2),m(2,2),e(4,1))

a=reshape((/1,3,2,5/),(/2,2/))
b=reshape((/5,11/),(/2/))
m=reshape((/.true.,.true.,.true.,.true./),(/2,2/))

print*,'A matrix & B vector'

do i=1,2
   print*,a(i,:),b(i)
enddo

print*,'Maximum value in A =',maxval(a)
print*,'Maximum size of B =',maxloc(b)
print*,'Minimum size of B =',minloc(b)
print*,'size of B =',size(b)

c=pack(a,m)
print*,'Packed A:',c

d=unpack(c,m,f)
print*,'Unpacked A'

do i=1,2
   print*,d(i,:)
enddo

end program assign3_1