#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
#define FOR(i,a,b) for(i=(a);i<=(b);i++)
#define ROF(i,a,b) for(i=(a);i>=(b);i--)
#define mmt(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long LL;
typedef long double LD; 
double PI=3.1415926535898;
double s1=PI*0.25;
double s2=4-2*s1,ans;
int n,m,Q;bool vis[110][110][4];
int a[110][110];char s[110];
void DFS(int x,int y,int k)
{
  if (!x||!y||x>n||y>m) return;
  if (vis[x][y][k]) return;
  vis[x][y][k]=1;
  if (k==1||k==2) ans+=s1;else ans+=s2;
  if (x>1)
  {
    if (a[x][y]==0)
    {
      if (a[x-1][y]==0) 
      {
        if (k==3) DFS(x-1,y,2);
        else if (k==1) DFS(x-1,y,3);
      }
      else 
      {
        if (k==3) DFS(x-1,y,3);
        else if (k==1) DFS(x-1,y,1);
      }
    }else
    {
      if (a[x-1][y]==0) 
      {
        if (k==3) DFS(x-1,y,3);
        else if (k==2) DFS(x-1,y,2);
      }
      else 
      {
        if (k==3) DFS(x-1,y,1);
        else if (k==2) DFS(x-1,y,3);
      }
    }
  }
  if (y>1)
  {
    if (a[x][y]==0)
    {
      if (a[x][y-1]==0) 
      {
        if (k==3) DFS(x,y-1,2);
        else if (k==1) DFS(x,y-1,3);
      }else
      {
        if (k==3) DFS(x,y-1,3);
        else if (k==1) DFS(x,y-1,2);
      }
    }else
    {
      if (a[x][y-1]==0) 
      {
        if (k==3) DFS(x,y-1,3);
        else if (k==1) DFS(x,y-1,2);
      }else
      {
        if (k==3) DFS(x,y-1,2);
        else if (k==1) DFS(x,y-1,3);
      }
    }
  }
  if (x<n)
  {
    if (a[x][y]==0)
    {
      if (a[x+1][y]==0)
      {
        if (k==3) DFS(x+1,y,1);
        else if (k==2) DFS(x+1,y,3);
      }else
      {
        if (k==3) DFS(x+1,y,3);
        else if (k==2) DFS(x+1,y,2);
      }
    }else
    {
      if (a[x+1][y]==0)
      {
        if (k==3) DFS(x+1,y,3);
        else if (k==1) DFS(x+1,y,1);
      }else
      {
        if (k==3) DFS(x+1,y,2);
        else if (k==1) DFS(x+1,y,3);
      }
    }
  }
  if (y<m)
  {
    if (a[x][y]==0)
    {
      if (a[x][y+1]==0)
      {
        if (k==3) DFS(x,y+1,1);
        else if (k==2) DFS(x,y+1,3);
      }else
      {
        if (k==3) DFS(x,y+1,3);
        else if (k==2) DFS(x,y+1,1);
      }
    }else
    {
      if (a[x][y+1]==0) 
      {
        if (k==3) DFS(x,y+1,3);
        else if (k==2) DFS(x,y+1,1);
      }else
      {
        if (k==3) DFS(x,y+1,1);
        else if (k==2) DFS(x,y+1,3);
      }
    }
  }
}
int main()
{
  ios::sync_with_stdio(false);
  scanf("%d%d",&n,&m);
  int i,j,x,y;
  FOR(i,1,n) 
  {
    scanf("%s",s);
    FOR(j,1,m) 
    {
      a[i][j]=(s[j-1]=='1');
    }
  }
  mmt(vis,0);
  scanf("%d",&Q);
  FOR(i,1,Q)
  {
    ans=0;
    scanf("%d%d",&x,&y);
    mmt(vis,0);
    if (((x&1)&&!(y&1))||(!(x&1)&&(y&1))) ans=0;
    else 
    {
      if (!(x&1)&&!(y&1))
      {
        int px=x/2,py=y/2;
        if (a[px][py]==0) DFS(px,py,2);else DFS(px,py,3);
        if (a[px+1][py]==0) DFS(px+1,py,3);else DFS(px+1,py,2);
        if (a[px][py+1]==0) DFS(px,py+1,3);else DFS(px,py+1,1);
        if (a[px+1][py+1]==0) DFS(px+1,py+1,1);else DFS(px+1,py+1,3);
      }else
      {
        DFS(x/2+1,y/2+1,3);
      }
    }
    printf("%.4lf\n",ans);
  }
  return 0;
}