#include<iostream>
using namespace std;
const long long dismo = 1000000007;
long long n = 0;
long long** multimatrix;
long long** saved;
long long A(long long index_x, long long index_y)
{
	long long save = saved[index_x][index_y];
	if (save != -1)
		return save;
	long long count = 0;
	long long squareval = multimatrix[index_x][index_y];
	for (long long i = 0; i < n; ++i)
	{
		long long boo = (squareval - multimatrix[i][index_y] > 0);
			if (!boo) continue;
			count = (count + boo) % dismo;
			count = (count + A(i, index_y)) % dismo;
	}
	for (long long i = 0; i < n; ++i)
	{
		long long boo = (squareval - multimatrix[index_x][i] > 0);
			if (!boo) continue;
			count = (count + boo) % dismo;
			count = (count + A(idex_x, i)) % dismo;
	}
	saved[index_x][index_y] = count;
	return count;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	long long countLIBERAL = 0;
	cin >> n;
	multimatrix = new long long* [n];
	for (long long ih = 0; ih < n; ++ih)
		multimatrix[ih] = new long long[n];
	saved = new long long* [n];
	for (long long ij = 0; ij < n; ++ij)
		saved[ij] = new long long[n];
	for (long long i6 = 0; i6 < n; ++i6)
		for (long long i7 = 0; i7 < n; ++i7)
			saved[i6][i7] = -1;	
	for (long long ix = 0; ix < n; ++ix)
		for (long long iy = 0; iy < n; ++iy)
		{
			cin >> multimatrix[ix][iy];
		}
	for (long long lx = 0; lx < n; ++lx)
		for (long long ny = 0; ny < n; ++ny)
		{
			countLIBERAL += A(lx, ny);
		}
	cout << (countLIBERAL + (n * n)) % dismo;
	return 0;
}