#include <iostream>
#include <algorithm>
#include <cmath>

#define rep2(i, b, n) for(int i=b; i < n; ++i)
#define rep(i, n) rep2(i, 0, n)
#define X first
#define Y second

using namespace std;

typedef pair<double, double> pdd;

double distance_sq( pdd a, pdd b )
{
	double cx = a.X - b.X;
	double cy = a.Y - b.Y;
	return ((cx*cx) + (cy*cy));
}

double norm( pdd &v )
{
	double len = sqrt((v.X*v.X) + (v.Y*v.Y));
	v.X /= len;
	v.Y /= len;
	return len;
}

void rotate( pdd &p )
{
	swap(p.X, p.Y);
	p.Y = -p.Y;
}

int main( void )
{
	int n;
	pdd p[300];
	while(cin >> n, n)
	{
		rep(i, n) cin >> p[i].X >> p[i].Y;
		int Max = 1;
		rep(i, n) {
			rep2(j, i+1, n) {
				if(distance_sq(p[i], p[j]) <= 4.0) {
					pdd v = make_pair(p[i].X-p[j].X, p[i].Y-p[j].Y);
					pdd c = make_pair(v.X / 2.0000, v.Y / 2.0000);
					pdd m = c;
					double len_c = norm(c);
					double sin_x = sqrt(1.0000 - (len_c*len_c));
					rotate(c);
					c.X *= sin_x; c.Y *= sin_x;
					pdd p3 = make_pair(p[j].X+m.X+c.X, p[j].Y+m.Y+c.Y);
					pdd p4 = make_pair(p[j].X+m.X-c.X, p[j].Y+m.Y-c.Y);
					int count_p3, count_p4;
					count_p3 = count_p4 = 2;
					rep(k, n) {
						if(i==k || j==k) continue;
						if(distance_sq(p3, p[k]) < 1.000001) ++count_p3;
						if(distance_sq(p4, p[k]) < 1.000001) ++count_p4;
					}
					Max = max(Max, max(count_p3, count_p4));
				}
			}
		}
		cout << Max << endl;
	}
	return 0;
}