E=enumerate
def f(s,b):
d={(x,y):v for x,r in E(b)for y,v in E(r)}
for i in d:
q=[(*i,s[1:],[i])]
if s[0]==d[i]:
while q:
(x,y,S,p),*q=sorted(q,key=lambda x:len(x[2]))
if''==S:return 1
q+=[(*v,S[1:],p+[v])for v in[(x+1,y),(x-1,y),(x,y+1),(x,y-1)]if(d.get(v)==S[0])>(v in p)]
s = """
010101
111011
011010
011011
"""
s1 = """
01010
10101
01010
10101
01010
"""
s2 = """
01110
01100
10010
10110
01101
"""
s3 = """
0
"""
s4 = """
10
01
"""
s5 = """
100
010
001
"""
s6 = """
00000
00000
00000
00000
00000
"""
s7 = """
10101
01010
10101
01010
10101
"""
s8 = """
100
010
001
"""
s9 = """
10001
01010
00100
01010
10001
"""
def to_board(s):
return [[*i] for i in filter(None, s.split('\n'))]
print(f('0111111100101', to_board(s)))
print(f('0101010101010101010101010', to_board(s1)))
print(f('011111000110100', to_board(s2)))
print(f('0', to_board(s3)))
print(f('1010', to_board(s4)))
print(f('100010001', to_board(s5)))
print('-'*50)
print(f('1', to_board(s6)))
print(f('11', to_board(s7)))
print(f('111', to_board(s8)))
print(f('1000100010001000101010100', to_board(s9)))
RT1lbnVtZXJhdGUKZGVmIGYocyxiKToKIGQ9eyh4LHkpOnYgZm9yIHgsciBpbiBFKGIpZm9yIHksdiBpbiBFKHIpfQogZm9yIGkgaW4gZDoKICBxPVsoKmksc1sxOl0sW2ldKV0KICBpZiBzWzBdPT1kW2ldOgogICB3aGlsZSBxOgogICAgKHgseSxTLHApLCpxPXNvcnRlZChxLGtleT1sYW1iZGEgeDpsZW4oeFsyXSkpCiAgICBpZicnPT1TOnJldHVybiAxCiAgICBxKz1bKCp2LFNbMTpdLHArW3ZdKWZvciB2IGluWyh4KzEseSksKHgtMSx5KSwoeCx5KzEpLCh4LHktMSldaWYoZC5nZXQodik9PVNbMF0pPih2IGluIHApXQogICAgCnMgPSAiIiIKMDEwMTAxCjExMTAxMQowMTEwMTAKMDExMDExCiIiIgpzMSA9ICIiIgowMTAxMAoxMDEwMQowMTAxMAoxMDEwMQowMTAxMAoiIiIKczIgPSAiIiIKMDExMTAKMDExMDAKMTAwMTAKMTAxMTAKMDExMDEKIiIiCnMzID0gIiIiCjAKIiIiCnM0ID0gIiIiCjEwCjAxCiIiIgpzNSA9ICIiIgoxMDAKMDEwCjAwMQoiIiIKCnM2ID0gIiIiCjAwMDAwCjAwMDAwCjAwMDAwCjAwMDAwCjAwMDAwCiIiIgoKczcgPSAiIiIKMTAxMDEKMDEwMTAKMTAxMDEKMDEwMTAKMTAxMDEKIiIiCgpzOCA9ICIiIgoxMDAKMDEwCjAwMQoiIiIKCnM5ID0gIiIiCjEwMDAxCjAxMDEwCjAwMTAwCjAxMDEwCjEwMDAxCiIiIgpkZWYgdG9fYm9hcmQocyk6CglyZXR1cm4gW1sqaV0gZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMuc3BsaXQoJ1xuJykpXQoKcHJpbnQoZignMDExMTExMTEwMDEwMScsIHRvX2JvYXJkKHMpKSkKcHJpbnQoZignMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCcsIHRvX2JvYXJkKHMxKSkpCnByaW50KGYoJzAxMTExMTAwMDExMDEwMCcsIHRvX2JvYXJkKHMyKSkpCnByaW50KGYoJzAnLCB0b19ib2FyZChzMykpKQpwcmludChmKCcxMDEwJywgdG9fYm9hcmQoczQpKSkKcHJpbnQoZignMTAwMDEwMDAxJywgdG9fYm9hcmQoczUpKSkKcHJpbnQoJy0nKjUwKQpwcmludChmKCcxJywgdG9fYm9hcmQoczYpKSkKcHJpbnQoZignMTEnLCB0b19ib2FyZChzNykpKQpwcmludChmKCcxMTEnLCB0b19ib2FyZChzOCkpKQpwcmludChmKCcxMDAwMTAwMDEwMDAxMDAwMTAxMDEwMTAwJywgdG9fYm9hcmQoczkpKSk=