#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>

#define rep(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define all(v) (v).begin(), (v).end()
#define rev(s) (s).rbegin(), (s).rend()
#define MP make_pair
#define X first
#define Y second

using namespace std;

typedef long long ll;
typedef pair<int, int> P;
typedef pair<double, double> dP;

const int INF = 100000000;
const double EPS = 1e-10;

vector<vector<double> > edge;
double dist(P &a, P &b){
	return sqrt(double(a.X-b.X)*(a.X-b.X)+(a.Y-b.Y)*(a.Y-b.Y));
}

bool dfs(vector<P> &c, bitset<20> &b, int hi, int di, double t){
	if(edge[hi][di] <= t+EPS) return false;
	if(b.count() == 20) return true;
	rep(i, c.size()-2){
		if(b[i]) continue;
		if(edge[i][di] <= t+edge[i][hi]+EPS) return false;
	}
	rep(i, c.size()-2){
		if(b[i]) continue;
		b[i] = true;
		if(dfs(c, b, i, di, t+edge[i][hi])) return true;
		b[i] = false;
	}

	return false;
}

int main(){
	while(1){
		int n;
		cin >> n;
		if(!n)break;
		P h, d;
		cin >> h.X >> h.Y >> d.X >> d.Y;
		vector<P> c(n);
		rep(i, n){
			cin >> c[i].X >> c[i].Y;
		}
		bitset<20> bits;
		bits = ~bits;
		rep(i, n){
			bits[i] = false;
		}
		c.push_back(h);
		c.push_back(d);
		edge.resize(n+2);
		rep(i, n+2){
			edge[i].resize(n+2);
		}
		rep(i, n+2){
			for(int j = i; j < n+2; j++){
				if(i == j){
					edge[i][j] = 0;
					continue;
				}
				edge[i][j] = edge[j][i] = dist(c[i], c[j]);
			}
		}

		cout << (dfs(c, bits, n, n+1, 0)?"YES":"NO") << endl;
	}

	return 0;
}