#!/usr/local/bin/python3 def rk(M,n): M=[r[:] for r in M];r=0 for c in range(n): p=next((i for i in range(r,n) if M[i][c]),-1) if p<0:continue M[r],M[p]=M[p],M[r] for i in range(r+1,n): if M[i][c]: for j in range(c,n):M[i][j]^=M[r][j] r+=1 return r def dt(M,n):return rk(M,n)==n def iv(M,n): A=[M[i][:]+[int(i==j) for j in range(n)] for i in range(n)];r=0 for c in range(n): p=next((i for i in range(r,n) if A[i][c]),-1) if p<0:return None A[r],A[p]=A[p],A[r] for i in range(n): if i!=r and A[i][c]: for j in range(c,2*n):A[i][j]^=A[r][j] r+=1 return [q[n:] for q in A] n=6 E=[(i,j) for i in range(n) for j in range(i+1,n)];c={} for m in range(1<>k&1:A[i][j]=A[j][i]=1 if dt(A,n): B=[r[:] for r in A] for i in range(n):B[i][i]^=1 if dt(B,n): C=iv(B,n) if all(C[i][i]==(i<2) for i in range(n)): D=[r[:] for r in C] D[0][0]^=1;D[1][1]^=1; r=rk(D,n) c[r]=c.get(r,0)+1 print(c)