#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<utility>
#include<vector>
#include<cmath>
#include<cstdio>
#define loop(i,a,b) for(int i=a;i<b;i++) 
#define rep(i,a) loop(i,0,a)
#define pb push_back
#define mp make_pair
#define it ::iterator
#define all(in) in.begin(),in.end()
const double PI=acos(-1);
const double ESP=1e-10;
using namespace std;
int main(){
  int n;
  cin>>n;
  vector<string>in(n);
  rep(i,n)cin>>in[i];
  int out=0;
  rep(i,n){//横
    int sum=0;
    bool h=false;
    rep(j,n){
      if(in[i][j]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
    }
  }
  rep(j,n){//縦
    int sum=0;
    bool h=false;
    rep(i,n){
      if(in[i][j]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
    }
  }
  rep(i,n){//右肩斜め
    int k=i;
    int sum=0;
    bool h=false;
    rep(j,n){
      if(k<0)break;
      if(in[k][j]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
      k--;
    }
  }
  rep(j,n){
    int k=j;
    int sum=0;
    bool h=false;
    for(int i=n-1;i>=0;i--){
      if(k<0)break;
      if(in[i][k]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
      k--;
    }
  }
  rep(i,n){//左肩斜め
    int k=i;
    int sum=0;
    bool h=false;
    rep(j,n){
      if(k>=n)break;
      if(in[k][j]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
      k++;
    }
  }
  rep(j,n){
    int k=j;
    int sum=0;
    bool h=false;
    for(int i=n-1;i>=0;i--){
      if(k<0)break;
      if(in[i][k]=='1'){
	if(h)sum++;
	else {
	  h=true;
	  sum++;
	}
	out=max(sum,out);
      }else{
	h=false;
	sum=0;
      }
      k++;
    }
  }



  cout<<out<<endl;
}