#include using namespace std; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define repr(i,n) for(int i = (int)(n); i >= 0; i--) #define all(v) v.begin(),v.end() typedef long long ll; ll moddividing(ll x,ll y){ vector vec(30); rep(i,30){ vec[i] = y; y = y * y % 1000000007; } ll c = x; c = c * vec[0] % 1000000007; c = c * vec[2] % 1000000007; c = c * vec[9] % 1000000007; c = c * vec[11] % 1000000007; c = c * vec[14] % 1000000007; c = c * vec[15] % 1000000007; c = c * vec[17] % 1000000007; c = c * vec[19] % 1000000007; c = c * vec[20] % 1000000007; c = c * vec[23] % 1000000007; c = c * vec[24] % 1000000007; c = c * vec[25] % 1000000007; c = c * vec[27] % 1000000007; c = c * vec[28] % 1000000007; c = c * vec[29] % 1000000007; return c; } int main(){ ll H,W; cin >> H >> W; vector > A(H, vector (W)); rep(i,H){ rep(j,W){ cin >> A[i][j]; } } ll line_zero_count = 0; ll row_zero_count = 0; vector line_has_zero(H, false); vector row_has_zero(W, false); vector line(H); vector row(W); rep(i,H){ line[i] = 1; rep(j,W){ if (A[i][j] != 0) line[i] = (line[i] * A[i][j]) % 1000000007; } } rep(j,W){ row[j] = 1; rep(i,H){ if (A[i][j] != 0) row[j] = (row[j] * A[i][j]) % 1000000007; } } ll all = 1; rep(i,H){ rep(j,W){ if (A[i][j] != 0) all = (all * A[i][j]) % 1000000007; else{ if (!line_has_zero[i]){ line_has_zero[i] = true; line_zero_count++; } if (!row_has_zero[j]){ row_has_zero[j] = true; row_zero_count++; } } } } ll Q; cin >> Q; rep(i,Q){ ll r,c; cin >> r >> c; r--; c--; if (line_zero_count == 0 && row_zero_count == 0){ ll x = (all * A[r][c]) % 1000000007; ll y = (line[r] * row[c]) % 1000000007; cout << moddividing(x, y) << endl; } else if (line_zero_count >= 2 && row_zero_count >= 2){ cout << 0 << endl; } else{ if (line_zero_count == 1 && row_zero_count == 1){ if (line_has_zero[r] || row_has_zero[c]){ ll x = (all * A[r][c]) % 1000000007; ll y = (line[r] * row[c]) % 1000000007; cout << moddividing(x, y) << endl; } else cout << 0 << endl; } else if (line_zero_count == 1 && row_zero_count >= 2){ if (line_has_zero[r]){ ll x = (all * A[r][c]) % 1000000007; ll y = (line[r] * row[c]) % 1000000007; cout << moddividing(x, y) << endl; } else cout << 0 << endl; } else if (line_zero_count >= 2 && row_zero_count == 1){ if (row_has_zero[c]){ ll x = (all * A[r][c]) % 1000000007; ll y = (line[r] * row[c]) % 1000000007; cout << moddividing(x, y) << endl; } else cout << 0 << endl; } } } }