program main implicit none integer::p(0:5,0:5) integer::i,x,y,move data p/36*-1/ do i=1,4 read *,p(i,1:4) end do ! find zero do x=1,4 do y=1,4 if(p(x,y).eq.0) then goto 10 end if end do end do 10 continue ! move do move = MOD((x-1)*4+y,16) ! print *, x,y,move ! call printer(p) if(p(x-1,y).eq.move) then p(x,y) = move p(x-1,y) = 0 x = x-1 else if(p(x+1,y).eq.move) then p(x,y) = move p(x+1,y) = 0 x = x+1 else if(p(x,y-1).eq.move) then p(x,y) = move p(x,y-1) = 0 y = y-1 else if(p(x,y+1).eq.move) then p(x,y) = move p(x,y+1) = 0 y = y+1 else exit end if end do ! check do x=1,4 do y=1,4 if(p(x,y).eq.MOD((x-1)*4+y,16)) then continue else print '(a)',"No" return end if end do end do print '(a)',"Yes" return contains subroutine printer(p) integer::p(0:5,0:5) integer::x do x=1,4 print *,p(x,1:4) end do end subroutine printer end program main