#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long int n, m, k; double p[21][21] = {}; bool done[21][21] = {}; double fun(char board[21][21], pair t[21][21], int r, int c) { if(r < 0 || r >= n || c < 0 || c >= m) { return 0; } if(!done[r][c]) { done[r][c] = true; if(board[r][c] == '#' || board[r][c] == '*') { p[r][c] = 0.0; }else if(board[r][c] == '%') { p[r][c] = 1.0; }else { if(t[r][c].first != -1) { p[r][c] = fun(board, t, t[r][c].first, t[r][c].second); }else { p[r][c] = (fun(board, t, r - 1, c) + fun(board, t, r, c + 1) + fun(board, t, r + 1, c) + fun(board, t, r, c - 1)); double d = 0.0; if(r - 1 >= 0) { if(board[r - 1][c] == '#') { d --; } d ++; } if(r + 1 < n) { if(board[r + 1][c] == '#') { d --; } d ++; } if(c - 1 >= 0) { if(board[r][c - 1] == '#') { d --; } d ++; } if(c + 1 < m) { if(board[r][c + 1] == '#') { d --; } d ++; } p[r][c] /= max(d, 1.0); } } }else { return 0.0; } return p[r][c]; } int main(void) { cin >> n >> m >> k; char board[21][21] = {}; for(int i = 0; i < n; i ++) { string s; cin >> s; for(int j = 0; j < m; j ++) { board[i][j] = s[j]; } } pair t[21][21] = {}; for(int i = 0; i < n; i ++) { for(int j = 0; j < m; j ++) { t[i][j] = make_pair(-1, -1); } } for(int i = 0; i < k; i ++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; t[x1 - 1][y1 - 1] = make_pair(x2 - 1, y2 - 1); } for(int i = 0; i < n; i ++) { for(int j = 0; j < m; j ++) { if(board[i][j] == 'A') { cout << fun(board, t, i, j); } } } return 0; }