#include <bits/stdc++.h>
using namespace std;
int k, n, t;
struct Op {
  int c, d;
} x[105];
long long a[605][605], f[605][605];
int ans;
int id(int ti, int td, int len) { return (ti + td) & (len - 1); }
void cpy(int li, int lj, int ti, int tj, int len) {
  for (int i = 0, ii = ti; i < len; i += 2, ii++)
    for (int j = 0, jj = tj; j < len; j += 2, jj++)
      a[ii][jj] = f[li + i][lj + j];
}
void solve(int lx, int ly, int len) {
  if (len == 1) {
    if (a[lx][ly] > 0) ans++;
    return;
  }
  for (int i = 0; i < len; i++)
    for (int j = 0; j < len; j++) {
      f[i + lx][j + ly] = 0;
      for (int tt = 1; tt <= t; tt++)
        f[i + lx][j + ly] ^=
            a[lx + id(i, -x[tt].c, len)][ly + id(j, -x[tt].d, len)];
    }
  int tlen = len >> 1;
  cpy(lx, ly, lx, ly, len);
  cpy(lx + 1, ly, lx + tlen, ly, len);
  cpy(lx, ly + 1, lx, ly + tlen, len);
  cpy(lx + 1, ly + 1, lx + tlen, ly + tlen, len);
  solve(lx, ly, tlen);
  solve(lx + tlen, ly, tlen);
  solve(lx, ly + tlen, tlen);
  solve(lx + tlen, ly + tlen, tlen);
}
int main() {
  scanf("%d", &k);
  n = 1 << k;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) scanf("%lld", &a[i][j]);
  scanf("%d", &t);
  for (int i = 1; i <= t; i++) scanf("%d %d", &x[i].c, &x[i].d);
  for (int i = 2; i <= t; i++) x[i] = Op{x[i].c - x[1].c, x[i].d - x[1].d};
  x[1] = Op{0, 0};
  solve(0, 0, n);
  printf("%d\n", ans);
  return 0;
}
