import
java.util.*;
public
class
Main {
static
List<Integer> findSubsets(List<Integer> arr,
int
N)
{
Map<Integer, Integer> M =
new
HashMap<>();
for
(
int
i =
0
; i < N; i++) {
int
element = arr.get(i);
if
(M.containsKey(element)) {
M.put(element, M.get(element) +
1
);
}
else
{
M.put(element,
1
);
}
}
List<Integer> subsets =
new
ArrayList<>();
for
(Map.Entry<Integer, Integer> entry :
M.entrySet()) {
subsets.add(entry.getValue());
}
return
subsets;
}
static
boolean
subsetSum(List<Integer> subsets,
int
N,
int
target)
{
boolean
[] dp =
new
boolean
[target +
1
];
Arrays.fill(dp,
false
);
dp[
0
] =
true
;
for
(
int
i =
1
; i <= N; i++) {
for
(
int
j = target; j >=
1
; j--) {
if
(j >= subsets.get(i -
1
)) {
dp[j] |= dp[j - subsets.get(i -
1
)];
}
}
}
return
dp[target];
}
static
void
divideInto2Subset(List<Integer> arr,
int
N)
{
List<Integer> subsets = findSubsets(arr, N);
if
((N) %
2
==
1
) {
System.out.println(
"No"
);
return
;
}
int
subsets_size = subsets.size();
boolean
isPossible
= subsetSum(subsets, subsets_size, N /
2
);
if
(isPossible) {
System.out.println(
"Yes"
);
}
else
{
System.out.println(
"No"
);
}
}
public
static
void
main(String[] args)
{
List<Integer> arr
=
new
ArrayList<>(Arrays.asList(
2
,
1
,
2
,
3
));
int
N = arr.size();
divideInto2Subset(arr, N);
}
}