python3 - <<'EOF' import itertools 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 count_formula(n): s=n-2 pairs=[(i,j) for i in range(s) for j in range(i+1,s)] cnt=0 for bits in itertools.product([0,1],repeat=len(pairs)+s): M=[[0]*s for _ in range(s)] for i in range(s):M[i][i]=bits[i] for (i,j),b in zip(pairs,bits[s:]):M[i][j]=M[j][i]=b v=[M[i][i] for i in range(s)] if not any(v):continue if not det(M):continue p=sum(v)%2 x=1^p one=[sum(M[i][j] for j in range(s))%2 for i in range(s)] w=[(x*v[i]^one[i]) for i in range(s)] D=[[0]*n for _ in range(n)] D[0][1]=D[1][0]=p for i in range(s): D[0][i+2]=D[i+2][0]=v[i] D[1][i+2]=D[i+2][1]=w[i] for j in range(s): D[i+2][j+2]=(M[i][j]^(v[i]&v[j])^(i==j)) if det(D):cnt+=1 return cnt print('n4',count_formula(4)) print('n6',count_formula(6)) def count_direct(n): pairs=[(i,j) for i in range(n) for j in range(i+1,n)] cnt=0 for bits in itertools.product([0,1],repeat=len(pairs)): C=[[0]*n for _ in range(n)] C[0][0]=C[1][1]=1 for (i,j),b in zip(pairs,bits):C[i][j]=C[j][i]=b if not det(C):continue