python3 - <<'EOF' import random def det(A): n=len(A) A=[list(r) for r in A] 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 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 invdiag(C): n=len(C) out=[] for i in range(n): rows=C[:i]+C[i+1:] sub=[row[:i]+row[i+1:] for row in rows] out.append(det(sub)) return out cf=0 for trial in range(2000): M=[[0]*6 for _ in range(6)] for i in range(6): M[i][i]=random.randrange(2) for j in range(i+1,6): M[i][j]=M[j][i]=random.randrange(2) if not any(M[i][i] for i in range(6)):continue if not det(M):continue v=[M[i][i] for i in range(6)] p=sum(v)%2 x=1^p one=[sum(M[i][j] for j in range(6))%2 for i in range(6)] w=[x*v[i]^one[i] for i in range(6)] C=[[0]*8 for _ in range(8)] C[0][0]=C[1][1]=1 C[0][1]=C[1][0]=p for i in range(6): C[0][i+2]=C[i+2][0]=v[i] C[1][i+2]=C[i+2][1]=w[i] for j in range(6): C[i+2][j+2]=M[i][j]^(v[i]&v[j]) if not det(C):cf+=1 if invdiag(C)!=[1]*8:cf+=1 print('fail',cf) EOF