#include <bits/stdc++.h>
using namespace std;
const int maxn=150+5;
double m[maxn][maxn],l[maxn];
int x[maxn],y[maxn];
int n;
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++){
char x1;
cin>>x1;
int x2=x1-'0';
if(x2==0){
if(i!=j) m[i][j]=2e9;
}
else m[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
m[i][j]=min(m[i][j],m[i][k]+m[k][j]);
}
}
}
double ans1=2e9,ans2=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(m[i][j]<2e9) l[i]=max(l[i],m[i][j]);
ans2=max(ans2,l[i]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(m[i][j]>=2e9) ans1=min(l[i]+l[j]+sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])),ans1);
}
}
ans1=max(ans1,ans2);
printf("%.6f",ans1);
}7