#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int n,m;
double w[999];
double x[999],y[999];
double dis[999][999];
void floy()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&i!=k&&j!=k)
{
if(dis[i][k]+dis[k][j]<dis[i][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
char c;
cin>>c;
if(c=='1')
{
double xx=(x[i]-x[j]),yy=y[i]-y[j];
dis[i][j]=sqrt(xx*xx+yy*yy);
}
else dis[i][j]=99999999;
}
floy();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(dis[i][j]<99999999&&w[i]<dis[i][j])
{
w[i]=dis[i][j];
}
double maxf=99999999;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i!=j&&dis[i][j]>=99999999)
{
double xx=(x[i]-x[j]),yy=y[i]-y[j];
maxf=min(maxf,w[i]+w[j]+sqrt(xx*xx+yy*yy));
}
}
for(int i=1;i<=n;i++) maxf=max(maxf,w[i]);
printf("%.6lf",maxf);
return 0;
}