#include<bits/stdc++.h>
using namespace std;
int n,d;
double maxt=1e18,x[155],y[155],a[155],t;
double f[155][155];
double suan(int i,int j)
{
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%1d",&d);
if(d==1)f[i][j]=suan(i,j);
else f[i][j]=1e12;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&j!=k&&k!=i)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(f[i][j]<1e12)a[i]=max(a[i],f[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&f[i][j]==1e12)
{
t=suan(i,j);
maxt=min(maxt,a[i]+a[j]+t);
}
printf("%.6lf",maxt);
return 0;
}