import Text.Printf
import Data.Char
import Data.List
import qualified Data.ByteString.Char8 as B
import qualified Data.Vector.Unboxed as V
main=putStrLn.printf"%.10f".solve.map(unfoldr(B.readInt.B.dropWhile isSpace)).B.lines=<<B.getContents
solve(_:xys)=sqrt.fromIntegral.V.foldr max 0$V.imap f as::Double where
  n=V.length as
  as=V.fromList$sortBy cmpArg.filter(/=(0,0))$map(\[x,y]->(x,y))xys
  f i a=maximum.snd.mapAccumL h(0,0).takeWhile(g a)$map(\k->as V.!((i+k)`mod`n))[0..n-1]
g a b=c>0 || c==0 && dot a b>=0 where c=cross a b
h(x1,y1)(x2,y2)=((x,y),x^2+y^2)where(x,y)=(x1+x2,y1+y2)
dot(x1,y1)(x2,y2)=x1*x2+y1*y2
cross(x1,y1)(x2,y2)=x1*y2-x2*y1
upperArg(x,y)=y>0 || y==0 && x>0
cmpArg l r=compare(upperArg r,0)(upperArg l,cross l r)