#include <cstdio>
#include <memory.h>
int N, S[26][26], DT[16][1<<16][10];
int Table[2][10] = {
    { 2, 3, 9, 4, 4, 2, 2, 8, 4, 9 },
    { 1, 9, 6, 9, 5, 7, 1, 7, 6, 9 }
};

int solve(int a, int state, int Ts)
{
    int ans = 0;
    if( a == N ) return (Ts==5||Ts==6||Ts==7);
    if( DT[a][state][Ts] == -1 )
    {
        if( Ts == 9 ) return DT[a][state][Ts] = 0;
        for(int i = 0 ; i < N ; i++)
            if( !(state&(1<<i)) )
            {
                ans += solve(a+1, state|(1<<i), Table[S[a][i]][Ts]);
                ans %= 100000007;
            }
        DT[a][state][Ts] = ans;
    }
    return DT[a][state][Ts];
}

int main()
{
    memset(DT,-1,sizeof(DT));
    freopen(".20.in","r", stdin);
    freopen(".20.out","w",stdout);
    scanf("%d", &N);
    for(int i = 0 ; i <N ; i++ ) for(int j = 0 ; j < N ; j++)
        scanf("%d", &S[i][j]);
    printf("%d", solve(0,0,0));
}
