#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
void adto(long long &a, long long b) {
  a += b;
  a %= ((long long)(1e9 + 7));
}
long long mul(long long a, long long b) {
  a = (a * b) % ((long long)(1e9 + 7));
}
long long dp[600][600][2];
long long w[600][600];
long long n;
long long slv(long long l, long long r, long long b) {
  if (dp[l][r][b] != -1) return dp[l][r][b];
  if (l == r) return 1;
  if (l > r) return 0;
  dp[l][r][b] = 0;
  if (b) adto(dp[l][r][b], slv(l + 1, r, 0));
  for (int i = l + 1; i <= r - b; i++)
    if (w[l][i]) {
      adto(dp[l][r][b], slv(i, r, b) * slv(l, i, 1));
    }
  return dp[l][r][b];
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) dp[i][j][0] = dp[i][j][1] = -1, cin >> w[i][j];
  cout << slv(0, n - 1, 0);
}
