#include <bits/stdc++.h>
using namespace std;
const long long int modulo = 1e9 + 7;
void anyade(long long int &a, long long int b) { a = (a + b) % modulo; }
const int limite = 505;
int n;
int t[limite][limite];
long long int computa(int i, int j);
long long int memcalcula[limite][limite];
int calculado[limite][limite];
long long int calcula(int i, int j) {
  if (i == j) return 1;
  if (i + 1 == j) return 1;
  long long int &mem = memcalcula[i][j];
  if (calculado[i][j]) return mem;
  calculado[i][j] = 1;
  mem = computa(i + 1, j);
  for (int med = i + 1; med < j; med++)
    if (t[i][med]) anyade(mem, calcula(i, med) * calcula(med, j));
  return mem;
}
long long int memcomputa[limite][limite];
int computado[limite][limite];
long long int computa(int i, int j) {
  if (i == j) return 1;
  if (i + 1 == j) return t[i][j];
  long long int &mem = memcomputa[i][j];
  if (computado[i][j]) return mem;
  computado[i][j] = 1;
  mem = 0;
  for (int med = i + 1; med <= j; med++)
    if (t[i][med]) anyade(mem, calcula(i, med) * computa(med, j));
  return mem;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) cin >> t[i][j];
  cout << computa(1, n) << endl;
}
