python3 - <<'EOF' import itertools C=[[1,1,0,1],[1,1,1,0],[0,1,0,1],[1,0,1,0]] allm=list(itertools.product([0,1],repeat=4)) def det(A): A=[list(r) for r in A] n=len(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 inv(A): n=len(A) M=[list(row)+[1 if i==j else 0 for j in range(n)] for i,row in enumerate(A)] for c in range(n): p=next((r for r in range(c,n) if M[r][c]),None) if p is None:return None M[c],M[p]=M[p],M[c] for r in range(n): if r!=c and M[r][c]:M[r]=[x^y for x,y in zip(M[r],M[c])] return [row[n:] for row in M] for Q in itertools.product(allm,repeat=4): if not det(Q):continue if tuple(tuple(sum(Q[i][k]*Q[j][k] for k in range(4))%2 for j in range(4)) for i in range(4))!=tuple(tuple(r) for r in C):continue if [sum(Q[i][j] for i in range(4))%2 for j in range(4)]!=[1,1,1,1]:continue if Q[0]!=(1,0,0,0):continue print('Q',Q) R=[row[1:] for row in Q[1:]] print('R',R) print('r',[sum(row)%2 for row in R]) print('s',[sum(R[i][j] for i in range(3))%2 for j in range(3)]) break else:print('none') EOF