#include using namespace std; int n, m; pair tunnels[21][21]; char board[21][21]; int conv (int a, int b) { return a*m + b + 1; } vector> getadj (int i, int j) { vector> res; vector> adj; adj.push_back(pair(i-1, j)); adj.push_back(pair(i+1, j)); adj.push_back(pair(i, j-1)); adj.push_back(pair(i, j+1)); for (auto p : adj) { if (p.first < 0 || p.first >= n || p.second < 0 || p.second >= m || board[p.first][p.second] == '#') continue; pair t = tunnels[p.first][p.second]; if (t.first < 0) res.push_back(p); else res.push_back(t); } return res; } int main() { int k, stx, sty, fnx, fny; cin >> n >> m >> k; for (int i = 0; i < n; ++i) { string s; cin >> s; for (int j = 0; j < m; ++j) { board[i][j] = s[j]; if (s[j] == 'A') { stx = i; sty = j; } if (s[j] == '%') { fnx = i; fny = j; } } } for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) tunnels[i][j] = pair(-1, -1); for (int i = 0; i < k; ++i) { int a, b, c, d; cin >> a >> b >> c >> d; --a; --b; --c; --d; tunnels[a][b] = pair(c, d); tunnels[c][d] = pair(a, b); } double adj[n*m+2][n*m+2]; vector nbrs(n*m+2, 0); for (int i = 0; i < n*m+2; ++i) for (int j = 0; j < n*m+2; ++j) adj[i][j] = 0; adj[n*m+1][n*m+1] = 1; nbrs[n*m] = nbrs[n*m+1] = 1; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { // cout << i << " " << j << " " << conv(i, j) << " " << board[i][j] << "\n"; if (board[i][j] == '%') adj[conv(i, j)][n*m+1] = 1; if (board[i][j] == 'A' || board[i][j] == 'O') { vector> a = getadj(i, j); nbrs[conv(i, j)] = a.size() ? 1/(double)a.size() : 0; for (auto p : a) adj[conv(i, j)][conv(p.first, p.second)] = nbrs[conv(i, j)]; } } } for (int tt = 0; tt < 25; ++tt) { /* for (int i = 0; i < n*m+2; ++i) { for (int j = 0; j < n*m+2; ++j) cout << setprecision(2) << adj[i][j] << " "; cout << "\n"; } cout << "\n"; */ double next[n*m+2][n*m+2]; for (int i = 0; i < n*m+2; ++i) for (int j = 0; j < n*m+2; ++j) { next[i][j] = 0; if (nbrs[i] == 0) continue; for (int k = 0; k < n*m+2; ++k) { next[i][j] += adj[i][k]*adj[k][j]; } } for (int i = 0; i < n*m+2; ++i) for (int j = 0; j < n*m+2; ++j) adj[i][j] = next[i][j]; } cout << fixed << setprecision(8) << adj[conv(stx, sty)][n*m+1] << "\n"; return 0; }