#include #include #include #include #include #include #include #include #define FOR(i,a,b) for (int i=a; i<=b; i++) #define FORR(i,b,a) for (int i=b; i>=a; i--) #define debug(a,b) cout < ii; using namespace std; ii adj[maxn][maxn]; char a[maxn][maxn]; int n,m,k,dx[5],dy[5]; ll canexit; bool able[maxn][maxn]; ii s; bool ok(ii u) { return (u.fr<=n) && (u.fr>=1) && (u.sc<=m) && (u.sc>=1) && (able[u.fr][u.sc]==0) && ((adj[u.fr][u.sc]==u) || (able[adj[u.fr][u.sc].fr][adj[u.fr][u.sc].sc])==0); } bool cantmove(ii s) { bool tmp=true; ii u; FOR(i,1,4) { u=mp(s.fr+dx[i],s.sc+dy[i]); tmp= tmp&& a[u.fr][u.sc]=='#'; } tmp=(tmp) || (a[s.fr][s.sc]=='*'); return tmp; } ll dfs(ii s) { if (cantmove(s)) return 1; if (a[s.fr][s.sc]=='%') { canexit++; return 0; } ll res; ii u; res=0; able[s.fr][s.sc]=1; FOR(i,1,4) { u=mp(s.fr+dx[i],s.sc+dy[i]); if (ok(u)) res+=dfs(adj[u.fr][u.sc]); } able[s.fr][s.sc]=0; return res; } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >>k; dx[1]=1; dx[2]=-1; dx[3]=0; dx[4]=0; dy[1]=0; dy[2]=0; dy[3]=1; dy[4]=-1; FOR(i,1,n) FOR(j,1,m) { cin >> a[i][j]; if (a[i][j]=='A') { s=mp(i,j); a[i][j]='O'; } adj[i][j].fr=0; if (a[i][j]!='#') able[i][j]=0; else able[i][j]=1; adj[i][j]=mp(i,j); } FOR(i,0,n+1) { a[i][0]='#'; a[i][m+1]='#'; } FOR(i,0,m+1) { a[0][i]='#'; a[n+1][i]='#'; } int x1,x2,y1,y2; FOR(i,1,k) { cin >> x1 >> y1 >> x2 >> y2; adj[x1][y1]=(mp(x2,y2)); adj[x2][y2]=(mp(x1,y1)); } ll res=dfs(s); long double kq = (long double) canexit/(canexit+res); cout << kq; return 0; }