#include<stdio.h>
FILE *fin=fopen("avioane.in","r");
FILE *fout=fopen("avioane.out","w");
int a[4][5][5]={
{
{0,0,1,0,0},
{1,1,1,1,1},
{0,0,1,0,0},
{0,1,1,1,0},
{0,0,1,0,0}
},
{
{0,1,0,0,0},
{0,1,0,1,0},
{1,1,1,1,1},
{0,1,0,1,0},
{0,1,0,0,0}
},
{
{0,0,1,0,0},
{0,1,1,1,0},
{0,0,1,0,0},
{1,1,1,1,1},
{0,0,1,0,0}
},
{
{0,0,0,1,0},
{0,1,0,1,0},
{1,1,1,1,1},
{0,1,0,1,0},
{0,0,0,1,0}
}
};
void back(int i, int j, int k){
if(k>max){
max=k;
}
if(i>n-5){
return;
}
// verific daca pot sa pun in pozitia i,j una din cele 4 matrice
for(d=0;d<=3;d++){
ok=1; // presupun sa pot sa puns
for(ii=0;ii<=4 && ok;ii++){
for(jj=0;jj<=4 && ok;jj++){
if(s[i+ii][j+jj]*a[d][ii][jj]!=0 ){ //verific daca elementul este liber, pentru a putea pune avionul
ok=0; // deci nu pot sa pun
}
}
}
if(ok){ // pot sa pun sau sa nu pun si sa fac auto-apel
for(ii=0;ii<=4;i++){
for(jj=0;jj<=4;jj++){
s[ii+i][j+jj]+=(k+1)*a[d][ii][jj];
}
}
if(j<n-5) back(i,j+1,k+1);
else back(i+1,1,k+1);
for(ii=0;ii<=4;i++){
for(jj=0;jj<=4;jj++){
s[ii+i][j+jj]-=(k+1)*a[d][ii][jj];
}
}
if(j<n-5) back(i,j+1,k);
else back(i+1,1,k);
}
else{ // nu pot sa pun, fac auto-apel
if(j<n-5) back(i,j+1,k);
else back(i+1,1,k);
}
}
}
int main(){
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
fsanf(fin,"%d",&s[i][j]);
}
}
back(1,1,0);
return 0;
}