program main implicit none integer, parameter :: nbit = 6 integer, parameter :: num = 2**nbit integer, dimension(0:num-1) :: fld integer :: nmax integer(kind=8) :: count logical(kind=1), dimension(0:num-1) :: set do nmax=1,num-1,2 fld = 0 set(0) = .true. set(1:nmax) = .false. set(nmax+1:) = .true. count = 0 call chk_level(1) print *,nmax+1,count end do contains recursive subroutine chk_level(i) integer, value :: i integer :: mask, val integer :: k do k=0,nbit-1 mask = ishft(1,k) val = ieor(fld(i-1), mask) if (set(val)) cycle fld(i) = val if (i < nmax) then set(val) = .true. call chk_level(i+1) set(val) = .false. else if (popcnt(val) /= 1) cycle count = count + 1 end if end do end subroutine chk_level end program main