#!/usr/bin/env python3 tab={(1,1):(0,-1),(2,2):(0,-1),(3,3):(0,-1),(1,2):(3,1),(2,1):(3,-1),(2,3):(1,1),(3,2):(1,-1),(3,1):(2,1),(1,3):(2,-1)} def mul(a,b): if a[0]==0: return (b[0],a[1]*b[1]) if b[0]==0: return (a[0],a[1]*b[1]) k,s=tab[(a[0],b[0])] return (k,a[1]*b[1]*s) letters=[((1,1),2,1),((1,-1),-2,-1),((2,1),-1,2),((2,-1),1,-2)] inv=[1,0,3,2] dp={} for e,(q,a,b) in enumerate(letters): dp[(e,e,q,a,b)]=1 for pos in range(1,12): nd={} for (f,l,q,x,y),c in dp.items(): for g,(qq,aa,bb) in enumerate(letters): if g==inv[l]: continue key=(f,g,mul(q,qq),x+aa,y+bb) nd[key]=nd.get(key,0)+c dp=nd res={} for (f,l,q,x,y),c in dp.items(): if l==inv[f]: continue if q!=(0,-1): continue if (x+2*y)%5: continue I=sum(1 for e in () ) e=(abs(2*x-y)+abs(x+2*y)+abs(-3*x-y))//2 # recover I from counts not possible here res[(x,y)]=res.get((x,y),0)+e*c print("byxy",res)