#include <bits/stdc++.h>
// iostream is too mainstream
#include <cstdio>
// bitch please
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <list>
#include <cmath>
#include <iomanip>
#include <time.h>
#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<string> V(N);
	vector< vector<dbl> > A(N*M,vector<dbl>(N*M,0));
	vector<dbl> v(N*M,0);
	vector<int> 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<int> > 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<int> 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