#!/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 E=[(i,j) for i in range(4) for j in range(i+1,4)] cnt=0 for m in range(1<<6): A=[[0]*4 for _ in range(4)] for k,(i,j) in enumerate(E): if m>>k&1: A[i][j]=A[j][i]=1 if dt(A,4): B=[r[:] for r in A] for i in range(4): B[i][i]^=1 if dt(B,4): cnt+=1 print(cnt)