def visit(i, j): if grid[i][j] == '#': return 0 grid[i][j] = '#' queue = [(i,j)] f = 0 while f < len(queue): i, j = queue[f]; f += 1 for di, dj in [(0,1),(1,0),(0,-1),(-1,0)]: ni,nj = i+di, j+dj if 0 <= ni < r and 0 <= nj < c: if grid[ni][nj] == 'o': grid[ni][nj] = '#' queue.append((ni,nj)) return len(queue) for cas in xrange(input()): r, c = map(int, raw_input().strip().split()) grid = [list(raw_input()) for i in xrange(r)] g = float(visit(0, 0)) ans = 1 for i in xrange(r): for j in xrange(c): v = visit(i, j) ans += v / (v + g) print "%.11f" % ans