题目描述

农场里有 n 牧区。部分牧区间有道路相连,不保证所有牧区间能直接或间接连通。多个有道路相连的所有牧区称为一个牧场。

一个牧场中最远的两个牧区的距离 ( 本题中所提到的所有距离指的都是最短的距离 )被称为这个牧场的直径。图 1 是有 5 个牧区的牧场,每一个牧区都有自己的坐标,如果两个牧区间有道路相连,则道路长度为欧几里得距离。图1所示的牧场的直径大约是 12.07106,最远的两个牧区是 A 和 E,它们之间的最短路径是 A - B - E 。

image

农场主准备选择两个牧场,从这个两个牧场中各选一个牧区,然后在被选中的两个牧区间修一条道路,这样两个牧场就合并成了一个更大的牧场,显然不同牧区相连后形成的新牧场的直径是不同的,农场主希望连接后新牧场的直径最小。

农场主只准备修一条道路,所以选那两个牧场合并是个难题,但农场主希望所选的两个牧场合并后新牧场的直径是所有合并方案中最短的。

现在请你编程找出合并后所有牧场中直径最大的牧场的直径。

注意,如果两条路径中途相交,我们不认为它们是连通的。只有两条路径在同一个牧区相交,我们才认为它们是连通的。

输入格式

第 1 行:一个整数 N(1 <= N <= 150),表示牧区数;

第 2 到 N + 1 行:每行两个整数 X,Y (0 <= X , Y <= 105) 表示 N 个牧区的坐标。每个牧区的坐标都是不一样的。

接下来为一个 N * N 的矩阵,第 i 行 j 列值为 1 表示节点 i 和 j 有边相连,距离为两点间的直线距离,0 表示两点不连通。

数据保证至少有两个牧区不连通。

输出格式

只有一行,包括一个实数,表示所求答案。数字保留六位小数。

样例

样例输入

8
10 10
15 10
20 10
15 15
20 15
30 15
25 10
30 10
01000000
10111000
01001000
01001000
01110000
00000010
00000101
00000010

样例输出

22.071068

数据范围与提示

对 100% 的数据满足: 1 <= N <= 150  ,  0 <= X , Y <= 105 。