#include <bits/stdc++.h>
using namespace std;
const int maxn = 505;
int dp[maxn][maxn][2];
const int mod = 1e9 + 7;
int a[maxn][maxn];
int n;
void add(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int dfs(int l, int r, int c) {
  if (dp[l][r][c] != -1) return dp[l][r][c];
  if (!a[l][r] && c) return 0;
  if (l == r) return 1;
  dp[l][r][c] = 0;
  if (c) {
    for (int i = l; i < r; i++) {
      add(dp[l][r][c], 1ll * (dfs(l, i, 0) + dfs(l, i, 1)) *
                           (dfs(i + 1, r, 0) + dfs(i + 1, r, 1)) % mod);
    }
  } else {
    for (int i = l; i < r; i++) {
      if (!a[l][i]) continue;
      add(dp[l][r][c],
          1ll * dfs(l, i, 1) * (dfs(i, r, 0) + dfs(i, r, 1)) % mod);
    }
  }
  return dp[l][r][c];
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      cin >> a[i][j];
    }
  }
  memset(dp, -1, sizeof(dp));
  cout << (dfs(1, n, 0) + dfs(1, n, 1)) % mod << "\n";
  return 0;
}
