import Control.Monad
import Control.Applicative
import Debug.Trace

data Point = Point (Double, Double) deriving (Show)
add (Point (x1, y1)) (Point (x2, y2)) = Point (x1 + x2, y1 + y2)
sub (Point (x1, y1)) (Point (x2, y2)) = Point (x1 - x2, y1 - y2)
mul (Point (x, y)) s = Point (x * s, y * s)
det (Point (x1, y1)) (Point (x2, y2)) = x1 * y2 - y1 * x2
nrm (Point (x, y)) = Point (x / n, y / n) where n = sqrt $ (x * x + y * y)
dist (Point (x1, y1)) (Point (x2, y2)) = sqrt (dx * dx + dy * dy) where
    dx = x1 - x2
    dy = y1 - y2


parsePoint :: String -> Point
parsePoint str =
    let [x, y] = map read $ words str
    in Point (x, y)

calcCenter :: Point -> Point -> Point -> Point
calcCenter a b c =
    let aa = dist a b
        bb = dist b c
        cc = dist c a
        a2 = aa * aa
        b2 = bb * bb
        c2 = cc * cc
        s  = 0.5 * (abs ((b `sub` a) `det` (c `sub` a)))
        cent = ( (a `mul` (a2 * (b2 + c2 - a2)))
               `add` (b `mul` (b2 * (c2 + a2 - b2)))
               `add` (c `mul` (c2 * (a2 + b2 - c2)))) `mul` (1.0 / (16.0 * s * s))
        r  = dist a cent
    in a `add` (nrm (cent `sub` a))

solve' :: [Point] -> Int
solve' pts =
    let inside p q = (dist p q) <= 1.0
        countIn c = length $ filter (\p -> inside c p) pts
    in maximum $ map countIn [ calcCenter a b c | a <- pts, b <- pts, c <- pts ]

solve :: [String] -> [Int]
solve []   = []
solve cont =
    let n           = read (head cont) :: Int
        (crds, rst) = splitAt n (tail cont)
        pts         = map parsePoint crds
    in if n == 0 then []
                 else (solve' pts) : solve rst

main :: IO ()
main = do
    contents <- getContents
    mapM_ print $ solve $ lines contents