#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define db(x){if(cond){cerr<<__LINE__<<" "<<#x<<" " <=(b);--i) #define fore(a,b)for(auto &a:b) #define vv vector #define pb push_back #define all(x)(x).begin(),(x).end() #define clr(x,a)memset(x,a,sizeof(x)) #define MA(a,b){a=max(a,b);} #define MI(a,b){a=min(a,b);} typedef long long ll;typedef long double ld;typedef vvvi;typedef vvvs; typedef pairpi2;typedef arrayi2;typedef arrayi3; typedef arrayld2;typedef arrayll2; int cond=0,multi=0,gcj=0; // #define DEBUG 1 #if DEBUG #define cin io stringstream io; int init(){int N=5;io< gauss(vector > &A, vector B) { int N=A.size(); int M = A[0].size(); vector used(N,0); rep (j, M) { int best_r=j; fo(i,j,N-1)if(abs(A[i][j])>abs(A[best_r][j]))best_r=i; fo(k,j,M-1)swap(A[j][k],A[best_r][k]); swap(B[j],B[best_r]); if(IsZero(A[j][j])){B.resize(0);return B;} B[j]/=A[j][j]; ford(k,M-1,j)A[j][k]/=A[j][j]; fo(r,0,N-1)if(r!=j){ B[r]-=A[r][j]*B[j]; ford(c,M-1,j)A[r][c]-=A[r][j]*A[j][c]; } } B.resize(M); return B; } char A[33][33]; i2 TARGET[33][33]; vvNEI[33][33]; bool VIS[33][33]; i2 dir[]={{{1,0}},{{-1,0}},{{0,-1}},{{0,1}}}; i2 operator+(i2 le,i2 ri){return {{le[0]+ri[0],le[1]+ri[1]}};} void go(int r,int c){ if(VIS[r][c])return; if(A[r][c]=='O'||A[r][c]=='A'||A[r][c]=='*'||A[r][c]=='%'){ VIS[r][c]=1; fore(d,dir){ i2 npos=d+i2({{r,c}}); go(npos[0],npos[1]); } } } struct solver{ void solve(){ int N,M,K;cin>>N>>M>>K; db(N<<" "<>A[r][c]; rep(k,K){ int r1,c1,r2,c2;cin>>r1>>c1>>r2>>c2; db(r1<<" "<>a(N*M,vector(N*M)); vvB(N*M); db(""); fo(r,1,N)fo(c,1,M){ vv&nei=NEI[r][c]; fore(d,dir){ i2 npos=d+i2({{r,c}}); if(A[npos[0]][npos[1]]=='O'|| A[npos[0]][npos[1]]=='A'|| A[npos[0]][npos[1]]=='*'|| A[npos[0]][npos[1]]=='%'){ nei.pb(npos); } } } int start=0; fo(r,1,N)fo(c,1,M) if(A[r][c]=='A')start=(r-1)*M+c-1,go(r,c); fo(r,1,N)fo(c,1,M) if(A[r][c]=='%'&&VIS[r][c]==0){ cout<<0<C=gauss(a,B); assert(C.size()); cout<=2&&argv[1][0]=='q'?1<<30:0; cout.setf(ios::fixed); cout.precision(10); int t;if(multi||gcj) cin>>t; else t=1; fo(i,1,t) {if(cond)cerr<<__LINE__<<" "<