#include<iostream>
#include<algorithm>
using lint=int64_t;
using namespace std;

constexpr int INF=1e9;

int N;
string S[210];

int col[210];
bool dfs(int cur=0,int ccol=1)
{
	col[cur]=ccol;
	for(int i=0;i<N;i++)
	{
		if(S[cur][i]=='0')continue;
		if(col[cur]==col[i])
			return false;
		if(col[i]==0 && !dfs(i,-ccol))
			return false;
	}

	return true;
}

int main()
{
	cin >> N;
	for(int i=0;i<N;i++)
		cin >> S[i];

	if(!dfs())
	{
		cout << -1 << endl;
		return 0;
	}

	int dist[210][210]={};
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			if(i!=j)
				dist[i][j]=INF;
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			if(S[i][j]=='1')
				dist[i][j]=1;
	
	for(int k=0;k<N;k++)
		for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);

	int ans=0;
	for(int i=0;i<N;i++)
		for(int j=0;j<N;j++)
			ans=max(ans,dist[i][j]);
	cout << ans+1 << endl;
	return 0;
}
