#!/usr/local/bin/python3 def rk(M,n): M=[r[:] for r in M];r=0 for c in range(n): p=-1 for i in range(r,n): if M[i][c]:p=i;break 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 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=-1 for i in range(r,n): if A[i][c]:p=i;break 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 count(bits,t): n=t+2;c=0 E=[(i,j) for i in range(t) for j in range(i+1,t)] for m in range(1<>k&1:W[i][j]=W[j][i]=1 if rk(W,t)>j)&1 B[a][2+j]=B[2+j][a]=1 for i in range(t): for j in range(t): v=F[i][j]^1^((bits>>i)&1)^((bits>>j)&1) B[2+i][2+j]=v A=[r[:] for r in B] for i in range(n):A[i][i]^=1 if rk(A,n)==n:c+=1 return c print('I',count(1,6)) print('Z',count(3,6))