Problem:
Score : 200 points

Problem Statement

Snuke is having a barbeque party.

At the party, he will make N servings of Skewer Meal.

Example of a serving of Skewer Meal

He has a stock of 2N skewers, all of which will be used in Skewer Meal. The length of the i-th skewer is L_i.
Also, he has an infinite supply of ingredients.

To make a serving of Skewer Meal, he picks 2 skewers and threads ingredients onto those skewers.
Let the length of the shorter skewer be x, then the serving can hold the maximum of x ingredients.

What is the maximum total number of ingredients that his N servings of Skewer Meal can hold, if he uses the skewers optimally?

Constraints

1≦N≦100

1≦L_i≦100

For each i, L_i is an integer.

Input

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

N
L_1 L_2 ... L_{2N}

Output

Print the maximum total number of ingredients that Snuke's N servings of Skewer Meal can hold.

Sample Input 1

2
1 3 1 2

Sample Output 1

3

If he makes a serving using the first and third skewers, and another using the second and fourth skewers, each serving will hold 1 and 2 ingredients, for the total of 3.

Sample Input 2

5
100 1 2 3 14 15 58 58 58 29

Sample Output 2

135

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>

const int N = 110;

int n, m;
int a[N];

int main(){
	scanf("%d%d", &n, &m);
	for (int i = 0; i < m; ++ i){
		scanf("%d", &a[i]);
	}
	if (m == 1){
		if (a[0] == 1){
			printf("1\n1\n1\n");
			return 0;
		}
		printf("%d\n2\n%d 1\n", a[0], a[0] - 1);
		return 0;
	}
	if (m == 2){
		if (a[1] == 1){
			printf("%d %d\n1\n%d\n", a[0], a[1], a[0] + a[1]);
			return 0;
		}
		printf("%d %d\n2\n%d %d\n", a[0], a[1], a[0] + 1, a[1] - 1);
		return 0;
	}
	for (int i = 1; i < m - 1; ++ i){
		if (a[i] & 1){
			if (a[0] % 2 == 0){
				std::swap(a[0], a[i]);
			}
			else if (a[m - 1] % 2 == 0){
				std::swap(a[i], a[m - 1]);
			}
			else{
				printf("Impossible\n");
				return 0;
			}
		}
	}
	for (int i = 0; i < m; ++ i){
		printf("%d%c", a[i], " \n"[i == m - 1]);
	}
	if (a[m - 1] == 1){
		printf("%d\n", n - 1);
		for (int i = 0; i < m - 1; ++ i){
			printf("%d%c", i ? a[i] : a[i] + 1, " \n"[i == m - 2]);
		}
		return 0;
	}
	printf("%d\n", m);
	for (int i = 0; i < m; ++ i){
		printf("%d%c", i == m - 1 ? a[i] - 1 : i ? a[i] : a[i] + 1, " \n"[i == m - 1]);
	}
	return 0;
}