(PARI) is_
A235609(w, n, p)={n || if(#setminus(Set(p=digits(w)), [1, 2]), return, w=fromdigits([d-1|d<-p], 2); n=#p; p[1]>1 && w=2^n-1-w); !w|| setsearch([2^(n-1)-2, 2^(n-1)+1, 2^n-1], w)|| for(i=1, n-2, (w-p=w>>i)%2^(n-i)&&next; for(j=1, i-1, (w>>j-p)%2^(n-i)||next(2)); is_
A235609(p, n-i)&&return(1))} \\
M. F. Hasler, Nov 02 2020
(Python)
from itertools import count, islice, product
def comp(w): return "".join("2" if c == "1" else "1" for c in w)
def agen():
priv = set("1"); yield from [1, 2]
for d in count(2):
found = []
for p in product("12", repeat=d-1):
w, passes = "1" + "".join(p), False
if len(set(w)) == 1: passes = True
elif len(w.lstrip(w[0])) != len(w.rstrip(w[0])): passes = False
else:
for i in range(1, len(w)):
p, s = w[:i], w[-i:]
if p == s and p not in w[1:-1] and p in priv:
passes = True; break
if passes: found.append(w); priv.add(w)
yield from (int(w) for w in found)
yield from sorted(int(comp(w)) for w in found)