#!/bin/python from collections import deque import sys n, m, k = map(int, raw_input().strip().split(' ')) mat = [] for a0 in xrange(n): row = raw_input().strip() mat.append(row) # Write Your Code Here row_range = range(n) col_range = range(m) def decrement(num): return num - 1 def is_inside_mat(x, y): return (x in row_range and y in col_range) tunnels = {} for a0 in xrange(k): i1, j1, i2, j2 = map(decrement, map(int, raw_input().strip().split(' '))) tunnels.update({(i1, j1): (i2, j2)}) tunnels.update({(i2, j2): (i1, j1)}) # Write Your Code Here # Write Your Code Here A = (-1, -1) for i in xrange(len(mat)): pos = mat[i].find('A') if pos != -1: A = (i, pos) break prob = 0 dq = deque([(A, 1)]) while(dq): elem = dq.popleft() x = elem[0][0]; y = elem[0][1] box = mat[x][y] if box == '%': prob += elem[1] elif box in ['0', 'A']: if (elem[0]) in tunnels: elem[0] = tunnels[elem[0]] new_prob = elem[1] * 0.25 new_elem = (x + 1, y) if is_inside_mat(*new_elem): dq.append((new_elem, new_prob)) new_elem = (x, y + 1) if is_inside_mat(*new_elem): dq.append((new_elem, new_prob)) new_elem = (x - 1, y) if is_inside_mat(*new_elem): dq.append((new_elem, new_prob)) new_elem = (x, y - 1) if is_inside_mat(*new_elem): dq.append((new_elem, new_prob)) print prob