#include using namespace std; struct Point{ long long int n, x, y; }; int n; vector v; long long int get_distance(Point a, Point b){ return (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y); } bool check(long long int x){ bool visited[n] = {0}; queue que; visited[0] = true; que.push(v[0]); while(!que.empty()){ Point curr = que.front(); que.pop(); if(curr.n == n-1)return true; for(int i=1;i> n; for(int i=0;i> x >> y; v.push_back((Point){i, x, y}); } long long int ok = 2000000000000000000, ng = 0; while(abs(ok-ng) > 1){ long long int mid = (ok + ng) / 2; if(check(mid))ok = mid; else ng = mid; } long long int lb = 0, ub = 1414213563; while(abs(ub-lb) > 1){ long long int mid = (ub + lb) / 2; if(mid * mid < ok)lb = mid; else ub = mid; } if((ub%10) != 0)ub += 10 - (ub%10); cout << ub << endl; return 0; }