python3 - <<'EOF' import itertools Cs=[[[1,1,0,1],[1,1,1,0],[0,1,0,1],[1,0,1,0]],[[1,1,1,0],[1,1,0,1],[1,0,0,1],[0,1,1,0]]] def mm(Q): return tuple(tuple(sum(Q[i][k]*Q[j][k] for k in range(4))%2 for j in range(4)) for i in range(4)) allm=list(itertools.product([0,1],repeat=4)) def det(A): A=[list(r) for r in A] for c in range(4): p=next((r for r in range(c,4) if A[r][c]),None) if p is None:return 0 A[c],A[p]=A[p],A[c] for r in range(c+1,4): if A[r][c]:A[r]=[x^y for x,y in zip(A[r],A[c])] return 1 Qs=[Q for Q in itertools.product(allm,repeat=4) if det(Q)] for C in Cs: ct=sum(mm(Q)==tuple(tuple(r) for r in C) for Q in Qs) print('count Q',ct) EOF