import math
E=enumerate
z='X'
M=(0,1),(1,0),(-1,0),(0,-1),(1,1),(-1,1),(1,-1),(-1,-1)
def f(g):
d={(x,y):v for x,r in E(g)for y,v in E(r)}
if sum(z==d[i]for i in d)==1:return 0
if len(e:=[(x,y)for x,y in d if d[(x,y)]==z==z*sum(z==d.get((x+X,y+Y))for X,Y in M)])==2:
a,b=e;q=p=[a];c=0
for a in q:
if a==b:return c if all(i in p for i in d if z==d[i])else-1
for X,Y in M:
if(z==d.get(V:=(a[0]+X,a[1]+Y)))>(V in p):c+=math.dist(a,V);p+=V,;q+=V,
def to_grid(s):
return [[*i] for i in filter(None, s.split('\n'))]
s = """
XXX.
...X
..X.
"""
s1 = """
....X....
.X.X.X.X.
X..X..X.X
.XX.....X
"""
s2 = """
....
....
..X.
"""
s3 = """
.X..
X..X
.XX.
"""
s4 = """
....
..X.
.X..
"""
s5 = """
....
XX..
....
"""
s6= """
.X.X
X.X.
....
"""
s7 = """
....
....
....
....
"""
s8 = """
.XX.
X..X
.XX.
"""
s9 = """
...X
..XX
.X..
"""
s10 = """
....
.X.X
...X
"""
s11 = """
X.X.
.X..
X.X.
"""
print(f(to_grid(s)))
print(f(to_grid(s1)))
print(f(to_grid(s2)))
print(f(to_grid(s3)))
print(f(to_grid(s4)))
print(f(to_grid(s5)))
print(f(to_grid(s6)))
print(f(to_grid(s7)))
print(f(to_grid(s8)))
print(f(to_grid(s9)))
print(f(to_grid(s10)))
print(f(to_grid(s11)))
aW1wb3J0IG1hdGgKRT1lbnVtZXJhdGUKej0nWCcKTT0oMCwxKSwoMSwwKSwoLTEsMCksKDAsLTEpLCgxLDEpLCgtMSwxKSwoMSwtMSksKC0xLC0xKQpkZWYgZihnKToKIGQ9eyh4LHkpOnYgZm9yIHgsciBpbiBFKGcpZm9yIHksdiBpbiBFKHIpfQogaWYgc3VtKHo9PWRbaV1mb3IgaSBpbiBkKT09MTpyZXR1cm4gMAogaWYgbGVuKGU6PVsoeCx5KWZvciB4LHkgaW4gZCBpZiBkWyh4LHkpXT09ej09eipzdW0oej09ZC5nZXQoKHgrWCx5K1kpKWZvciBYLFkgaW4gTSldKT09MjoKICBhLGI9ZTtxPXA9W2FdO2M9MAogIGZvciBhIGluIHE6CiAgIGlmIGE9PWI6cmV0dXJuIGMgaWYgYWxsKGkgaW4gcCBmb3IgaSBpbiBkIGlmIHo9PWRbaV0pZWxzZS0xCiAgIGZvciBYLFkgaW4gTToKICAgIGlmKHo9PWQuZ2V0KFY6PShhWzBdK1gsYVsxXStZKSkpPihWIGluIHApOmMrPW1hdGguZGlzdChhLFYpO3ArPVYsO3ErPVYsCiAgICAKZGVmIHRvX2dyaWQocyk6CglyZXR1cm4gW1sqaV0gZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMuc3BsaXQoJ1xuJykpXQpzID0gIiIiClhYWC4KLi4uWAouLlguCiIiIgoKczEgPSAiIiIKLi4uLlguLi4uCi5YLlguWC5YLgpYLi5YLi5YLlgKLlhYLi4uLi5YCiIiIgpzMiA9ICIiIgouLi4uCi4uLi4KLi5YLgoiIiIKczMgPSAiIiIKLlguLgpYLi5YCi5YWC4KIiIiCnM0ID0gIiIiCi4uLi4KLi5YLgouWC4uCiIiIgpzNSA9ICIiIgouLi4uClhYLi4KLi4uLgoiIiIKczY9ICIiIgouWC5YClguWC4KLi4uLgoiIiIKczcgPSAiIiIKLi4uLgouLi4uCi4uLi4KLi4uLgoiIiIKczggPSAiIiIKLlhYLgpYLi5YCi5YWC4KIiIiCnM5ID0gIiIiCi4uLlgKLi5YWAouWC4uCiIiIgpzMTAgPSAiIiIKLi4uLgouWC5YCi4uLlgKIiIiCnMxMSA9ICIiIgpYLlguCi5YLi4KWC5YLgoiIiIKCnByaW50KGYodG9fZ3JpZChzKSkpCnByaW50KGYodG9fZ3JpZChzMSkpKQpwcmludChmKHRvX2dyaWQoczIpKSkKcHJpbnQoZih0b19ncmlkKHMzKSkpCnByaW50KGYodG9fZ3JpZChzNCkpKQpwcmludChmKHRvX2dyaWQoczUpKSkKcHJpbnQoZih0b19ncmlkKHM2KSkpCnByaW50KGYodG9fZ3JpZChzNykpKQpwcmludChmKHRvX2dyaWQoczgpKSkKcHJpbnQoZih0b19ncmlkKHM5KSkpCnByaW50KGYodG9fZ3JpZChzMTApKSkKcHJpbnQoZih0b19ncmlkKHMxMSkpKQ==