{-# LANGUAGE BangPatterns #-}
import Control.Monad
import Control.Applicative
import Data.Array

eps :: Double
eps = 1.0e-8

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

inside :: (Double, Double) -> (Double, Double) -> Bool
inside (x1, y1) (x2, y2) =
    let dx = x1 - x2
        dy = y1 - y2
    in dx * dx + dy * dy <= 1.0 + eps

countUp :: [(Double, Double)] -> ((Double, Double), (Double, Double)) -> Int
countUp pts ((x1, y1), (x2, y2)) =
    let dx = x1 - x2
        dy = y1 - y2
        l2 = dx * dx + dy * dy
    in if l2 >= 4.0 - eps
            then 1
            else
                let mx = (x1 + x2) * 0.5
                    my = (y1 + y2) * 0.5
                    l  = sqrt l2
                    m  = sqrt (1.0 - 0.25 * l2)
                    nx = m * (-dy) / l
                    ny = m * dx    / l
                    m1 = length $ filter (inside (mx + nx, my + ny)) pts
                    m2 = length $ filter (inside (mx - nx, my - ny)) pts
                in (max m1 m2)

solve' :: [(Double, Double)] -> Int
solve' pts =
    let np    = length pts
        parr  = listArray (0, np-1) pts
        pairs = [ (parr ! i, parr ! j) | i <- [0..np-1], j <- [i+1..np-1] ]
    in if null pairs
           then 1
           else maximum $ map (countUp pts) pairs

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