숫자 조각 결속
N개의 숫자 조각이 놓여 있다. 최종 점수는 모든 조각의 값을 더해서 계산하지만, 계산하기 전에 서로 다른 두 조각을 하나의 결속으로 묶을 수 있다.
조각의 위치와 상관없이 묶을 수 있으나, 같은 조각을 자기 자신과 묶는 것은 불가능하다.
묶인 두 조각은 더하는 대신 두 값을 곱한 결과를 점수에 더한다.
예를 들면, 어떤 조각들이 {-2, -1, 0, 1, 3, 4}일 때, 그냥 모두 더하면 6이다.
하지만 -2와 -1을 묶고, 3과 4를 묶으면 \(0+1+(-2*-1)+(3*4) = 15\)가 되어 더 큰 점수를 만들 수 있다.
각 조각은 한 번만 묶거나, 아니면 묶지 않아야 한다.
숫자 조각들이 주어졌을 때, 적절히 묶어서 만들 수 있는 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 숫자 조각의 개수 N이 주어진다.
N은 50보다 작은 자연수이다.
둘째 줄부터 N개의 줄에 각 숫자 조각의 값이 주어진다.
숫자 조각의 값은 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
출력
숫자 조각들을 묶어서 얻을 수 있는 합의 최댓값을 출력한다.
정답은 항상 231보다 작다.
예제 입력 1
4
-1
2
1
3
예제 출력 1
6
예제 입력 2
6
0
1
2
4
3
5
예제 출력 2
27
예제 입력 3
1
-1
예제 출력 3
-1
예제 입력 4
3
-1
0
1
예제 출력 4
1
예제 입력 5
2
1
1
예제 출력 5
2