#!/usr/bin/env python3 from functools import lru_cache V=[0,11,10,9,32,30,28,14,17,22,41,45,48] O=[0]*13;O[8]=7 E=[(1,4),(1,8),(2,5),(2,8),(3,6),(3,7),(7,8),(8,9),(8,10),(8,11),(8,12)] D=[[]for _ in range(13)] for a,b in E:D[a].append(b) def t(S): if S==0:return O[:] G=[[]for _ in range(13)] for x in(1,2,3): if(S>>(x-1))%2:G[0].append(x) for a,b in E: if(S>>(a-1))%2 and(S>>(b-1))%2:G[a].append(b) m=max((V[i],-i)for i in range(1,13)if(S>>(i-1))%2);w=-m[1] def R(ban): x={0};q=[0] while q: u=q.pop() for v in G[u]: if v!=ban and v not in x:x.add(v);q.append(v) return x sec=max([0,*[V[i]for i in range(1,13)if i!=w and(S>>(i-1))%2]]) z=[O[i]for i in range(13)] for j in range(1,13): if(S>>(j-1))%2: z[j]=V[j]-sec if j==w else(7 if w not in R(j)else 0) return z @lru_cache(None) def f(i,S): if i>12: z=t(S);return(1<>(a-1))%2:inv=1;break if not inv:return f(-~i,S) ps=f(-~i,S|(1<<(i-1))) pe=f(-~i,S) th=max(ps[1][i],pe[1][i]) r=0 for c in(ps,pe): if c[2][i]>=th: for j in range(4096): if(c[0]>>j)%2 and t(j)[i]>=th:r|=1<>j)%2: z=t(j) for k in range(1,13): if z[k]mx[k]:mx[k]=z[k] return r,tuple(mn),tuple(mx) r=f(1,0) print(bin(r[0]).count('1')) print([i for i in range(4096)if(r[0]>>i)%2]) print(f.cache_info())