f=\
lambda s:any(all({*s}-{*k}for k in j)^1and K(s,j)and j[0]==j[1][::-1]==j[2]for i in range(L(s))for j in C(s,i+1))
L=len
K=lambda s,l:not(l or s)or l and s[:(T:=L(l[0]))]==l[0]and(K(s[T:],z:=l[1:])or K(s[T-1:],z))
C=lambda s,n,l=[]:L(l)==3and[l]or[j for x in range(L(s)-n+1)for j in C(s,n,l+[s[x:x+n]])]
import re
s1="""a (a / a / a)
bb (b / b / b) - note that there are two possible choices for Y
ccc (c / c / c)
coco (co / oc / co)
mamma (ma / am / ma)
uhhuh (uh / hu / uh)
xyyxxy (xy / yx / xy)
banaban (ban / nab / ban)
dottodot (dot / tod / dot)
dadadadada (dada / adad / dada)"""
for i in filter(None, s1.split('\n')):
print(f(re.findall('^\w+', i)[0]))
s2="""xy
coc
faff
xyzzy
mummy
random
hotshot
tralindrome
dadadadadada
aabaabaaaabaa"""
print('-'*20)
for i in filter(None, s2.split('\n')):
print(f(i))
Zj1cCmxhbWJkYSBzOmFueShhbGwoeypzfS17Kmt9Zm9yIGsgaW4gaileMWFuZCBLKHMsailhbmQgalswXT09alsxXVs6Oi0xXT09alsyXWZvciBpIGluIHJhbmdlKEwocykpZm9yIGogaW4gQyhzLGkrMSkpCkw9bGVuCks9bGFtYmRhIHMsbDpub3QobCBvciBzKW9yIGwgYW5kIHNbOihUOj1MKGxbMF0pKV09PWxbMF1hbmQoSyhzW1Q6XSx6Oj1sWzE6XSlvciBLKHNbVC0xOl0seikpCkM9bGFtYmRhIHMsbixsPVtdOkwobCk9PTNhbmRbbF1vcltqIGZvciB4IGluIHJhbmdlKEwocyktbisxKWZvciBqIGluIEMocyxuLGwrW3NbeDp4K25dXSldCgppbXBvcnQgcmUKczE9IiIiYSAgICAgICAoYSAvIGEgLyBhKQpiYiAgICAgIChiIC8gYiAvIGIpIC0gbm90ZSB0aGF0IHRoZXJlIGFyZSB0d28gcG9zc2libGUgY2hvaWNlcyBmb3IgWQpjY2MgICAgIChjIC8gYyAvIGMpCmNvY28gICAgKGNvIC8gb2MgLyBjbykKbWFtbWEgICAobWEgLyBhbSAvIG1hKQp1aGh1aCAgICh1aCAvIGh1IC8gdWgpCnh5eXh4eSAgKHh5IC8geXggLyB4eSkKYmFuYWJhbiAgICAoYmFuIC8gbmFiIC8gYmFuKQpkb3R0b2RvdCAgIChkb3QgLyB0b2QgLyBkb3QpCmRhZGFkYWRhZGEgKGRhZGEgLyBhZGFkIC8gZGFkYSkiIiIKZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMxLnNwbGl0KCdcbicpKToKCXByaW50KGYocmUuZmluZGFsbCgnXlx3KycsIGkpWzBdKSkKczI9IiIieHkKY29jCmZhZmYKeHl6enkKbXVtbXkKcmFuZG9tCmhvdHNob3QKdHJhbGluZHJvbWUKZGFkYWRhZGFkYWRhCmFhYmFhYmFhYWFiYWEiIiIKcHJpbnQoJy0nKjIwKQpmb3IgaSBpbiBmaWx0ZXIoTm9uZSwgczIuc3BsaXQoJ1xuJykpOgoJcHJpbnQoZihpKSk=