#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
using ull = unsigned ll;
ll read();
const ll N = 500 + 114;
int n;
int x[N], y[N];
vector<ll>g[N];
ll d[N], sum = 0, f[N];
ll calc_dis_Pow(int a, int b) {
return (x[a] - x[b]) * (x[a] - x[b]) + (y[a] - y[b]) * (y[a] - y[b]);
}
void dfs(int u) {
for (ll v : g[u]) {
if (!d[v] or d[v] >= d[u] + 1) {
d[v] = d[u] + 1;
dfs(v);
}
}
return;
}
int main() {
n = read();
x[0] = 0, y[0] = 0;
for (int i = 1; i <= n; i++) {
x[i] = read(), y[i] = read();
}
for (int i = 1; i <= n; i++) {
ll min_dis = -1, min_num = 0;
for (int j = 0; j <= n; j++) {
if (i == j) continue;
ll t = calc_dis_Pow(i, j);
if ( t < min_dis or min_dis == -1)
min_dis = t, min_num = j;
}
g[i].push_back(min_num);
g[min_num].push_back(i);
}//建图
d[0] = 1;
dfs(0);
for (int i = 0; i <= n; i++)
sum += d[i];
if (sum % 2 == 1) {
printf("No\n");
return 0;
}
ll mid = sum >> 1;
for (int i = 0; i <= n; i++) {
for (int j = mid; j >= d[i]; j--) {
f[j] = max(f[j], f[j - d[i]] + d[i]);
}
}
if (f[mid] == mid)
printf("Yes\n");
else
printf("No\n");
return 0;
}
ll read() {
ll x = 0, f = 1;
char c = getchar();
while (!isdigit(c))f = c == '-' ? -1 : f, c = getchar();
while (isdigit(c))x = x * 10 + c - '0', c = getchar();
return x * f;
}
谢谢了!