ll n,m,d[800][800],v[800]; void f(ll i){ v[i]=1; rep(j,n){ if(!v[j]&&d[i][j]<=m){ f(j); } } } { rd(n); ll x[n],y[n],t[n]; rd((x,y,t)(n)); rep(i,n){ rep(j,i){ d[i][j]=d[j][i]= t[i]==t[j] ? (x[i]-x[j])**2+(y[i]-y[j])**2 : (ll)ceil((sqrt(x[i]**2+y[i]**2)-sqrt(x[j]**2+y[j]**2))**2); } } ll l=-1,h=33d8; while(l+1>1; rep(i,n){ v[i]=0; } f(0); if(v[n-1]){ h=m; }else{ l=m; } } wt(h); }