#include<iostream>
using namespace std;

//----- 最大値を返す関数 -----//
int f_max(int , int , int);
//----- 最大値を返す関数のオーバーロード -----//
int f_max(int , int);



int main(void)
{
	//入力変数
	int n = 0;
	//マス配列
	char wh_str_masu[256][256] = {0};

	while (true)
	{
		cin >> n;

		//入力の終わり
		if (n == 0)
		{
			return 0;
		}

		//出力変数
		int ans = 0;

		//max変数
		int max_yoko = 0;
		int max_tate = 0;
		int max_migiagari = 0;
		int max_migisagari = 0;

		//マスの入力
		for (int i = 0; i < n; i++)
		{
			cin >> wh_str_masu[i];
		}

		for (int i = 0; i < n; i++)
		{
			//保存しながら見る変数
			int max_hozon_yoko = 0;
			int max_hozon_tate = 0;
			int max_hozon_migiagari = 0;
			int max_hozon_migisagari = 0;

			//連続していた数を記憶
			int renzoku_tate = 0;
			int renzoku_yoko = 0;
			int renzoku_migiagari = 0;
			int renzoku_migisagari = 0;

			for (int j = 0; j < n; j++)
			{
				//横
				if (wh_str_masu[i][j] == '1')
				{
					renzoku_yoko++;
				}
				//違う値なら大きいほうを格納
				else
				{
					//2数の最大値
					max_hozon_yoko = f_max(max_yoko , renzoku_yoko);
					renzoku_yoko = 0;
				}
				//縦
				if (wh_str_masu[j][i] == '1')
				{
					renzoku_tate++;
				}
				else
				{
					//2数の最大値
					max_hozon_tate = f_max(max_tate , renzoku_tate);
					renzoku_tate = 0;
				}
			}

			//右下
			for (int j = i + 1; j < n; j++)
			{
				if (wh_str_masu[j][j - 1] == '1')
				{
					renzoku_migisagari++;
				}
				else
				{
					max_hozon_migisagari = f_max(max_hozon_migisagari , renzoku_migisagari);
					renzoku_migisagari = 0;
				}
			}
			//右上
			for (int j = 0; j <= i; j++)
			{
				if (wh_str_masu[i - j][j] == '1')
				{
					renzoku_migiagari++;
				}
				else
				{
					max_hozon_migiagari = f_max(max_hozon_migiagari , renzoku_migiagari);
					renzoku_migiagari = 0;
				}
			}

			//大きかったらmaxに代入
			max_yoko = f_max(max_yoko , renzoku_yoko , max_hozon_yoko);
			max_tate = f_max(max_tate , renzoku_tate , max_hozon_tate);
			max_migiagari = f_max(max_migiagari , renzoku_migiagari , max_hozon_migiagari);
			max_migisagari = f_max(max_migisagari , renzoku_migisagari , max_hozon_migisagari);
		}

		//関数を利用し2段階で計算
		ans = f_max(max_yoko , max_tate , max_migiagari);
		ans = f_max(ans , max_migisagari);

		cout << ans << endl;
	}

	return 0;
}




//*****----- 最大値を返す関数 -----*****//

int f_max(int a , int b , int c)
{
	if (a > b)
	{
		if (a > c)
		{
			return a;
		}
		return c;
	}
	else
	{
		if (b > c)
		{
			return b;
		}
		return c;
	}
}




//*****----- 最大値を返す関数のオーバーロード -----*****//

int f_max(int a , int b)
{
	if (a > b)
	{
		return a;
	}
	return b;
}