#include<bits/stdc++.h>
using namespace std;
const int maxn=210;
int n,a[maxn][maxn];
vector<int> ver[maxn];
int flag[maxn];
inline void dfs(int x,int v)
{
	if(v==1) v=2;else v=1;
	if(flag[x]){if(flag[x]!=v){puts("-1");exit(0);}return;}
	flag[x]=v;
	for(int i=0;i<(int)ver[x].size();i++) dfs(ver[x][i],v);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=i==j?0:(n+1);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
	{
		char c;cin>>c;if(i==j) continue;
		if(c=='1') a[i][j]=1,ver[i].push_back(j),ver[j].push_back(i);
	}
	dfs(1,0);
	for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
	int ans=0;
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ans=max(ans,a[i][j]+1);
	cout<<ans<<endl;
}