anchor.diff:                                                          0, 1, 0,    &
                                                           0, 0, 1 /), &
                                                        (/ 3, 3 /))
  -    integer                   :: mrot(3, 3, 3, 4), cube(3, 3, 3)
  +    integer                   :: mrot(3, 3, 3, 4), cube(3, 3, 3), calls
       type(puts_t), allocatable :: puts_cache(:)
       type(piece), allocatable  :: ps(:)
       type(list)                :: sols
       real                      :: t0, t1
  -
   
       call cpu_time(t0)
       call init_mrot(mrot)
  
positive.code:     sols%length = 0
      allocate(sols%d(3, 3, 3, 128))
  
      call search(ps, size(ps), cube, sols)
      call cpu_time(t1)
  
      write (*, "(a, i6)") "Solutions: ", sols%length
      print '("Search time: ",f12.6," seconds.")', t1 - t0
      call print_cubes(sols)
  
  contains
  
negative.code:             puts = fast_puts(cube, puts_cache(n)%d, n)
          end if
          do i = 1, puts%length
              calls = calls + 1
              call search(ps, n - 1, puts%d(:, :, :, i), sols)
          end do
      end subroutine
  