#!/usr/local/bin/python3 def dt(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==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] def br(n): E=[(i,j) for i in range(n) for j in range(i+1,n)];c=0 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)):c+=1 return c print('n4',br(4)) print('n6',br(6))