Problem:
Score : 300 points

Problem Statement

There are N integers written on a blackboard. The i-th integer is A_i.

Takahashi will repeatedly perform the following operation on these numbers:

Select a pair of integers, A_i and A_j, that have the same parity (that is, both are even or both are odd) and erase them.

Then, write a new integer on the blackboard that is equal to the sum of those integers, A_i+A_j.

Determine whether it is possible to have only one integer on the blackboard.

Constraints

2 ≦ N ≦ 10^5

1 ≦ A_i ≦ 10^9

A_i is an integer.

Input

The input is given from Standard Input in the following format:

N
A_1 A_2 … A_N

Output

If it is possible to have only one integer on the blackboard, print YES. Otherwise, print NO.

Sample Input 1

3
1 2 3

Sample Output 1

YES

It is possible to have only one integer on the blackboard, as follows:

Erase 1 and 3 from the blackboard, then write 4. Now, there are two integers on the blackboard: 2 and 4.

Erase 2 and 4 from the blackboard, then write 6. Now, there is only one integer on the blackboard: 6.

Sample Input 2

5
1 2 3 4 5

Sample Output 2

NO

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int MAXN = 100010;

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	for(; !isdigit(ch); ch = getchar()) if(ch=='-') f=-1;
	for(; isdigit(ch); ch = getchar()) x = (x*10)+(ch^48);
	return x * f;
}

int st[MAXN], to[MAXN<<1];
int nxt[MAXN<<1], e;
inline void Add(int u, int v) {
	to[++e] = v, nxt[e] = st[u];
	st[u] = e;
}

int n, a[MAXN];
int deg[MAXN], r;
ll val[MAXN];

void dfs(int u, int fa) {
	int i;
	if(deg[u] == 1) {
		val[u] = a[u];
		return;
	}
	for(i = st[u]; i; i = nxt[i]) {
		int v = to[i];
		if(v == fa) continue;
		dfs(v, u);
	}
	ll S = 0, K = 0;
	for(i = st[u]; i; i = nxt[i]) {
		int v = to[i];
		if(v == fa) continue;
		S += val[v];
		K = max(K, val[v]);
		//val[u] -= val[v];
	}
	val[u] = a[u]*2-S;
	if(val[u] < 0 || S-a[u] < 0) {
		printf("NO\n");
		exit(0);
	}
	if(a[u] < K) {
		printf("NO\n");
		exit(0);
	}
}

int main() {

	int i;

	n = read();

	for(i = 1; i <= n; i++) a[i] = read();
	for(i = 1; i < n; i++) {
		int u = read(), v = read();
		Add(u, v), Add(v, u);
		deg[u]++, deg[v]++;
	}
	//for(i = 1; i <= n; i++) printf("%d ", deg[i]);
	if(n == 2) {
		if(a[1] == a[2]) printf("YES\n");
		else printf("NO\n");
		return 0;
	}

	for(r = 1; r <= n; r++) 
		if(deg[r] != 1) break;

	dfs(r, 0);
	/*printf("%d\n", r);
	for(i = 1; i <= n; i++) printf("%lld ", val[i]);
	printf("\n");*/
	if(val[r] == 0) {
		printf("YES\n");
	}
	else printf("NO\n");
	return 0;
}