#include <bits/stdc++.h>
using namespace std;
int const N = 541;
int const MOD = 1e9 + 7;
int w[N][N][2], d[N][N][2];
int n, a[N][N];
int ans;
void add(int &a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
int mul(int a, int b) { return a * 1LL * b % MOD; }
int norm(int x) {
  if (x < 0) x += n;
  if (x >= n) x -= n;
  return x;
}
int rec(int x, int y, int f) {
  if (norm(x + 1) == y) return 1;
  if (w[x][y][f]) return d[x][y][f];
  w[x][y][f] = 1;
  int res = 0;
  if (f) res = rec(x, y, 0);
  for (int i = 0; i < n; ++i) {
    int z = norm(x + i);
    if (z == y) break;
    if (f) {
      if (a[y][z]) {
        int v0 = rec(x, z, 1);
        int v1 = rec(z, y, f);
        int v2 = mul(v0, v1);
        add(res, v2);
      }
    } else {
      if (a[x][z]) {
        int v0 = rec(x, z, 1);
        int v1 = rec(z, y, f);
        int v2 = mul(v0, v1);
        add(res, v2);
      }
    }
  }
  d[x][y][f] = res;
  return res;
}
void solve() {
  for (int i = 0; i < n; ++i) {
    if (!a[0][i]) continue;
    int v0 = rec(0, i, 1);
    int v1 = rec(i, 0, 0);
    int v2 = mul(v0, v1);
    add(ans, v2);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) scanf("%d", &a[i][j]);
  solve();
  printf("%d\n", ans);
  return 0;
}
