#include // iostream is too mainstream #include // bitch please #include #include #include #include #include #include #include #include #include #include #include #include #define dibs reserve #define OVER9000 1234567890 #define ALL_THE(CAKE,LIE) for(auto LIE =CAKE.begin(); LIE != CAKE.end(); LIE++) #define tisic 47 #define soclose 1e-8 #define chocolate win // so much chocolate #define patkan 9 #define ff first #define ss second #define abs(x) ((x < 0)?-(x):x) #define uint unsigned int #define dbl double #define pi 3.14159265358979323846 using namespace std; // mylittledoge #ifdef DONLINE_JUDGE // palindromic tree is better than splay tree! #define lld I64d #endif int main() { cin.sync_with_stdio(0); cin.tie(0); cout << fixed << setprecision(10); int N,M,K; cin >> N >> M >> K; vector V(N); vector< vector > A(N*M,vector(N*M,0)); vector v(N*M,0); vector id(N*M); for(int i =0; i < N*M; i++) id[i] =i; int dx[] ={1,-1,0,0}; int dy[] ={0,0,1,-1}; for(int i =0; i < N; i++) cin >> V[i]; int st =0; vector< vector > G(N*M); for(int i =0; i < N; i++) for(int j =0; j < M; j++) { if(V[i][j] == '#') continue; if(V[i][j] == 'A') st =i*M+j; if(V[i][j] == '*') { A[i*M+j][i*M+j] =1; continue;} if(V[i][j] == '%') { A[i*M+j][i*M+j] =1; v[i*M+j] =1; continue;} int e =0; for(int k =0; k < 4; k++) if(dx[k]+i >= 0 && dy[k]+j >= 0 && dx[k]+i < N && dy[k]+j < M && V[dx[k]+i][dy[k]+j] != '#') G[i*M+j].push_back((dx[k]+i)*M+dy[k]+j); A[i*M+j][i*M+j] =1;} vector T(N*M); for(int i =0; i < N*M; i++) T[i] =i; for(int i =0; i < K; i++) { int x[2],y[2]; cin >> x[0] >> y[0] >> x[1] >> y[1]; for(int k =0; k < 2; k++) T[(x[k]-1)*M+y[k]-1] =(x[1-k]-1)*M+y[1-k]-1; } for(int i =0; i < N*M; i++) ALL_THE(G[i],it) A[i][T[*it]] -=1.0/G[i].size(); int a =0; for(int i =0; i < N*M; i++) { int x =-1; for(int j =a; j < N*M; j++) if(abs(A[j][i]) > soclose) { x =j; break;} if(x == -1) continue; swap(A[x],A[a]); swap(v[x],v[a]); swap(id[x],id[a]); dbl d =A[a][i]; for(int j =0; j < N*M; j++) A[a][j] /=d; v[a] /=d; for(int j =0; j < N*M; j++) if(j != a) { d =A[j][i]; for(int k =0; k < N*M; k++) A[j][k] -=d*A[a][k]; v[j] -=d*v[a];} a++;} for(int i =0; i < N*M; i++) if(id[i] == st) cout << v[i] << "\n"; return 0;} // look at my code // my code is amazing