#include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef pair pii; typedef pair pll; typedef pair pdd; #define X first #define Y second const int MAXN = 410; int n, m; char s[MAXN][MAXN]; int place(int x, int y) { return (x-1)*m+y-1; } ld a[MAXN][MAXN]; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; void guass(int n) { for (int i=0;ifabs(a[way][i])) way=j; for (int k=0;k<=n;++k) swap(a[i][k],a[way][k]); for (int k=n;k>=i;--k) a[i][k]/=a[i][i]; for (int j=0;j=i;--k) a[j][k]-=a[i][k]*a[j][i]; } /* puts(""); for (int i = 0; i < n; ++ i) { for (int j = 0; j <= n; ++ j) printf("%.2f ", a[i][j]); puts(""); } */ } } int main() { int k; scanf("%d%d%d", &n, &m, &k); for (int i = 1; i <= n; ++ i) scanf("%s", s[i]+1); map to; for (int i = 1; i <= n; ++ i) for (int j = 1; j <= m; ++ j) to[place(i, j)] = place(i, j); for (int i = 1; i <= k; ++ i) { int x1, y1, x2, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); to[place(x1, y1)] = place(x2, y2); to[place(x2, y2)] = place(x1, y1); } int start = 0; for (int i = 1; i <= n; ++ i) for (int j = 1; j <= m; ++ j) { if (s[i][j] == '#' || s[i][j] == '*') { a[place(i, j)][place(i, j)] = 1; continue; } if (s[i][j] == '%') { a[place(i, j)][place(i, j)] = 1; a[place(i, j)][n*m] = 1; continue; } int tot = 0; for (int d = 0; d < 4; ++ d) { int x = i+dx[d], y = j+dy[d]; if (1 <= x && x <= n && 1 <= y && y <= m) { if (s[x][y] != '#') { ++tot; a[place(i, j)][to[place(x, y)]] -= 1; } } } if (tot == 0) { a[place(i, j)][place(i, j)] = 1; } else { for (int p = 0; p <= n*m; ++ p) a[place(i, j)][p] /= tot; a[place(i, j)][place(i, j)] += 1; } if (s[i][j] == 'A') { start = place(i, j); } } /* for (int i = 0; i < n*m; ++ i) { for (int j = 0; j <= n*m; ++ j) printf("%.2f ", a[i][j]); puts(""); } */ guass(n*m); printf("%.12f\n", a[start][n*m]); return 0; }