#include using namespace std; typedef pair pii; typedef double lf; int N, M, K; pii st; vector > G; vector > T; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; vector > > cc[2]; lf dp(int t, int r, int c, int k) { if(k >= 70000) return 0; lf &ret = cc[t][r][c][k]; if(ret != -1) return ret; if(!t && T[r][c] != pii(-1, -1)) return ret = dp(1, T[r][c].first, T[r][c].second, k + 1); if(G[r][c] == '%') return ret = 1; if(G[r][c] == '*') return ret = 0; int cnt = 0; for(int i = 0; i < 4; i++) { int nr = r + dy[i]; int nc = c + dx[i]; if(nr < 0 || N <= nr) continue; if(nc < 0 || M <= nc) continue; if(G[nr][nc] == '#') continue; cnt++; } ret = 0; for(int i = 0; i < 4; i++) { int nr = r + dy[i]; int nc = c + dx[i]; if(nr < 0 || N <= nr) continue; if(nc < 0 || M <= nc) continue; if(G[nr][nc] == '#') continue; ret += 1.0 / cnt * dp(0, nr, nc, k + 1); } return ret; } int main() { scanf("%d %d %d", &N, &M, &K); G = vector >(N, vector(M)); for(int i = 0; i < N; i++) { scanf("\n"); for(int j = 0; j < M; j++) { scanf("%c", &G[i][j]); if(G[i][j] == 'A') st = pii(i, j); } } T = vector >(N, vector(M, pii(-1, -1))); for(int i = 0; i < K; i++) { int r1, c1, r2, c2; scanf("%d %d %d %d", &r1, &c1, &r2, &c2); r1--; c1--; r2--; c2--; T[r1][c1] = pii(r2, c2); T[r2][c2] = pii(r1, c1); } cc[0] = cc[1] = vector > >(N, vector >(M, vector(70000, -1))); printf("%.20lf", dp(0, st.first, st.second, 0)); }