h,w = list(map(int,input().split()))

ls = [eval(input()) for _ in range(h)]

from collections import deque

a = 0

for i in range(h):

  for j in range(w):

    if ls[i][j]=='#': continue

    d = [[-1]*w for _ in range(h)]

    d[i][j] = 0

    q = deque([(i,j)])

    while q:

      x,y = q.popleft()

      for dx,dy in ((1,0),(0,1),(-1,0),(0,-1)):

        nx,ny = x+dx,y+dy

        if not (0<=nx<h and 0<=ny<w): continue

        if ls[nx][ny]=='.' and d[nx][ny]==-1:

          d[nx][ny] = d[x][y]+1

          q.append((nx,ny))

    a = max(a,max(max(j for j in i) for i in d))

print(a)
h,w=list(map(int,input().split()))

g=[[*eval(input())] for _ in range(h)]

from collections import *

a=0

for sx in range(h):

  for sy in range(w):

    if g[sx][sy]=='#': continue

    d=[[-1]*w for _ in range(h)]

    d[sx][sy]=0

    q=deque([(sx,sy)])

    while q:

      x,y=q.popleft()

      for dx,dy in [(1,0),(0,1),(-1,0),(0,-1)]:

        nx,ny=x+dx,y+dy

        if 0<=nx<h and 0<=ny<w and g[nx][ny]=='.' and d[nx][ny]<0:

          d[nx][ny]=d[x][y]+1

          q.append((nx,ny))

    a=max(a,max(max(i for i in l) for l in d))

print(a)
h, w = list(map(int, input().split()))
ls = [eval(input()) for _ in range(h)]
from collections import deque

a = 0
for i in range(h):
    for j in range(w):
        if ls[i][j] == "#":
            continue
        d = [[-1] * w for _ in range(h)]
        d[i][j] = 0
        q = deque([(i, j)])
        while q:
            x, y = q.popleft()
            for dx, dy in ((1, 0), (0, 1), (-1, 0), (0, -1)):
                nx, ny = x + dx, y + dy
                if not (0 <= nx < h and 0 <= ny < w):
                    continue
                if ls[nx][ny] == "." and d[nx][ny] == -1:
                    d[nx][ny] = d[x][y] + 1
                    q.append((nx, ny))
        a = max(a, max(max(j for j in i) for i in d))
print(a)

h, w = list(map(int, input().split()))
g = [[*eval(input())] for _ in range(h)]
from collections import *

a = 0
for sx in range(h):
    for sy in range(w):
        if g[sx][sy] == "#":
            continue
        d = [[-1] * w for _ in range(h)]
        d[sx][sy] = 0
        q = deque([(sx, sy)])
        while q:
            x, y = q.popleft()
            for dx, dy in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
                nx, ny = x + dx, y + dy
                if 0 <= nx < h and 0 <= ny < w and g[nx][ny] == "." and d[nx][ny] < 0:
                    d[nx][ny] = d[x][y] + 1
                    q.append((nx, ny))
        a = max(a, max(max(i for i in l) for l in d))
print(a)

-ls = [eval(input()) for _ in range(h)] -from collections import deque +g = [[*eval(input())] for _ in range(h)] +from collections import * -for i in range(h): -    for j in range(w): -        if ls[i][j] == "#": +for sx in range(h): +    for sy in range(w): +        if g[sx][sy] == "#": -        d[i][j] = 0 -        q = deque([(i, j)]) +        d[sx][sy] = 0 +        q = deque([(sx, sy)]) -            for dx, dy in ((1, 0), (0, 1), (-1, 0), (0, -1)): +            for dx, dy in [(1, 0), (0, 1), (-1, 0), (0, -1)]: -                if not (0 <= nx < h and 0 <= ny < w): -                    continue -                if ls[nx][ny] == "." and d[nx][ny] == -1: +                if 0 <= nx < h and 0 <= ny < w and g[nx][ny] == "." and d[nx][ny] < 0: -        a = max(a, max(max(j for j in i) for i in d)) +        a = max(a, max(max(i for i in l) for l in d))