python3 - <<'EOF' import itertools def det(A): n=len(A) A=[row[:] for row in A] d=1 for c in range(n): p=next((r for r in range(c,n) if A[r][c]),None) if p is None:return 0 if p!=c:A[c],A[p]=A[p],A[c] for r in range(c+1,n): if A[r][c]:A[r]=[x^y for x,y in zip(A[r],A[c])] return 1 def inv(A): n=len(A) M=[row[:]+[1 if i==j else 0 for j in range(n)] for i,row in enumerate(A)] for c in range(n): p=next((r for r in range(c,n) if M[r][c]),None) if p is None:return None M[c],M[p]=M[p],M[c] for r in range(n): if r!=c and M[r][c]:M[r]=[x^y for x,y in zip(M[r],M[c])] return [row[n:] for row in M] cnt=0 sol=[] vars=[(i,j) for i in range(4) for j in range(i+1,4)] for bits in itertools.product([0,1],repeat=6): C=[[0]*4 for _ in range(4)] C[0][0]=C[1][1]=1 for (i,j),b in zip(vars,bits):C[i][j]=C[j][i]=b if det(C) and inv(C) and all(inv(C)[i][i]==1 for i in range(4)) and det([[C[i][j]^(i==j) for j in range(4)] for i in range(4)]): cnt+=1 sol.append(C) print(cnt) for C in sol:print(C) EOF